win64 qt与fortran (codeblocks) 混合编程

本教程主要解说用fortran生成dll供qt调用(win64)

本教程须要的软件及文件可从以下的连接下载:

http://pan.baidu.com/s/1c04jziC

fortran我用的软件是codeblocks。这是一款包括基于gfortran的开源软件。

1、先来说说codebolcks的环境配置:

先下载codeblocks(下面简称cb),这个没啥好说的,下载就是了。

1.1、codebolcks的汉化:

将下载的.mo文件放在:CodeBlocks\share\CodeBlocks\locale\zh_CN 下

打开cb:设置->环境设置->视图->勾选Internationalization->Chinese

重新启动cb即可了

1.2、编译器设置(仅对64位系统):

假设你的系统是64位的要生成64位的dll。

首先下载TDM-GCC-64压缩包,解压。我的解压在F盘。

设置->编译器->Toolchain executables->

编译器安装文件夹改为F:\TDM-GCC-64

C编译器、C++编译器、动态链接器、静态链接器、资源编译器

都改为F:\TDM-GCC-64\bin下的。

例如以下图:

2、用codebolcks生成dll:

文件->新建->project->Fortran->Fortran DLL,取个名字我取的dll

这时应该会自己主动生成一个main.f95文件,直接点黄色齿轮编译即可了。

这时再找到你建project的目录,在\bin\Debug目录下应该有这三个文件,我们仅仅须要当中的dll文件

3、用qt动态链接codeblocks生成的dll:

打开qt,新建一个project,运行qmake,将自己主动生成一个目录,我的是build-untitled-Desktop_Qt_5_4_2_MSVC2013_OpenGL_64bit-Debug

将之前生成的dll.dll拷贝到build-untitled-Desktop_Qt_5_4_2_MSVC2013_OpenGL_64bit-Debug\debug目录下

在main.cpp输入下面代码:

#include <QCoreApplication>
#include <QDebug>
#include <QLibrary>
typedef void(*fun)();// 定义导出函数类型(这个函数类型要与dll中一致)
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QLibrary dll("dll.dll");//载入dll
    if(dll.load()){
        fun sub=(fun)dll.resolve("sub_"); //根据dll中函数名,获取dll中函数
        if(sub){
            qDebug()<<"成功!";
        }
        else{
            qDebug()<<"载入函数失败!";
        }
    }
    else{
        qDebug()<<"载入dll失败!";
    }
    return a.exec();
}

编译显示“成功!”则实现了对接。

4、dll的调用方式:

4.1、关于VC++ dll的调用:

动态链接库(dll)的动态调用和静态调用,静态链接库(static lib)的调用,这篇博文都讲的非常清楚:

http://www.cnblogs.com/chio/archive/2007/11/03/948480.html

4.2、关于qt dll的调用方式:

qt dll的显示调用(动态调用)和隐式调用(静态调用),这篇博文讲的非常清楚:

http://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810239.html

4.3、qt 创建与调用 dll/static lib:

qt 创建 dll 的时候在 .pro 中加入:

TEMPLATE = lib

(1)dll显示调用:

我写的这篇就是用Qlibrary的显示调用,长处是仅仅须要.dll文件就能够调用,不需在.pro中加LIB路径

(2)dll隐式调用:

静态调用往往还须要.h文件。在.pro中加入LIB += “绝对路径\文件名称.dll”(注意斜杠的方向\)

.cpp中声明头文件#include 文件名称.h

qt 创建 static lib 的时候在 .pro 中加入:

TEMPLATE = lib

CONFIG += staticlib

(3)静态链接库:

假设是静态库还须要.lib/.a文件。并且要在.pro中先声明.lib/.a

INCLUDEPATH += "绝对路径"

LIB += “绝对路径\文件名称.lib” 或LIB += “绝对路径\文件名称.a”

.cpp中声明头文件#include 文件名称.h

注:

qt中还能够用QPluginLoader,这个请自行补脑,也须要.h等文件

qt中加入LIBS还能够通过在.pro 右键->加入库,然后选择路径

5、生成的dll中函数名的查看:

下载 depends 打开dll 能够查看到当中的函数名

打开之前的dll,能够看到当中的函数名 sub_

6、关于makefile和编程原理:

相信非常多人和我一样对.lib/.a、.dll/.so、.obj/.o这些个文件之间的关系会感到非常困惑。读懂以下这篇文章也差点儿相同懂了:

http://wenku.baidu.com/link?

url=FY5aNAyRmb73cWAaivKZuYY7coJhUm7kDBpQgzpM2X-hoXLPYqo89G_RHhZTk2uAqp7A03ekWw4di2B_ZdASHcSFxf4D9-f4tZELMElWWlC

还有这篇关于makefile使用方法的一些归纳:

http://wenku.baidu.com/link?url=ErxBlB_bWtPNhoNLIUpLepIbTuP0oU8tWcKlyxt0e92mep1HqCZkfD_lHSyjUPYxzh76caRKz-HbgFUM5XR_iNoH4v6A9HmFWTUw7I8LhiO

时间: 2024-10-10 00:40:21

win64 qt与fortran (codeblocks) 混合编程的相关文章

FORTRAN &amp; MATLAB 混合编程

[email protected] 第一部分:Fortran调用Matlab引擎 1  什么是Matlab引擎 所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++.Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab的控制.可以主要功能有: ★ 打开/关闭一个Matlab对话: ★ 向Matlab环境发送命令字符串: ★ 从Matlab环境中读取数据: ★ 向Matlab环境中写入数据. 与其它各种接口相比,引擎所提供的Matl

Qt for iOS,Qt 与Objective C混合编程

项目设置 既然要聊 Qt 混合 OC 编程,首先要简单介绍一下 Objective C .我只有一句话:Go,问搜索引擎去.因为我所知实在有限,怕误导了您.当然如果您不怕,往下看吧. OC源文件介绍 首先我要说一下 Objective C 的源文件,后缀是.m 或 .mm ,在 .mm 文件里,可以直接使用 C++ 代码.所以,我们要混合 Qt 代码与 OC 代码,就需要在 Qt 项目里加入 mm 文件. pro 文件配置 Qt SDK for Mac ,安装之后, Qt Creator 会使用

[转载:]C#与Fortran混合编程之本地调用Fortran动态链接库

前言 C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++.并依靠强大的.NET底层框架.C#可以用来快速构建桌面及Web应用.然而在我们的实际工作中,尽管C#已经非常完善,但还是不能完成我们所有的工作.在很多工程计算中,C#语言的计算速度,精度,以及执行效率相对来说都达不到项目的要求.因此我们便考虑是否有一种方式将我们的工程计算部分和我们的项目分开,将计算部分用另一种执行更快,精度更高的语言来编写,然后在C#中调用,最后完成我们的工作.答案是肯定的. Fortran是一门古老

Qt Quick 之 QML 与 C++ 混合编程详解

Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可用,要么用起来不方便,所以呢,很多时候我们是会基于这样的原则来混合使用 QML 和 C++: QML 构建界面, C++ 实现非界面的业务逻辑和复杂运算. 请给

VS2013调用MATLAB混合编程

Visual Studio和MATLAB混合编程,有两种方法: 1 MATLAB调用C程序: 2 VS调用MATLAB(目前见到的都是VS,其他编译器如codeblocks,或不提供这项功能): 前一种是用MATLAB的mex命令调用VS或其他编译器,将以一定方式编写出的C文件编译成.mexw32(针对win32)或者.mexw64(针对win64),然后MATLAB就可以用调用动态链接库的方式,调用C程序.这一过程中,只需要在安装好编译器的前提下,执行: mex -setup 和 mbuild

C#和matlab混合编程

C#和MatLab的混合编程,充分利用了winform的直观显示和matlab的强大计算能力.在此以一个小例子的形式给大家讲述一下二者混合编程的实现. 一.软件的配置说明 C#版本:VS2010        matlab版本:matlab2013a 二.把 matlab函数编译成dll文件 2.1首先写一个函数的.m文件(如下函数MatrixOpera实现两个矩阵的相加和相减) %--------------------------------------------------------

QML与C++混合编程详解

1.QML与C++为什么要混合编程 QML与C++为什么要混合编程,简单来说,就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法,下面介绍了两者间交互的方法与技巧. 2.QML访问C++概述 Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号.槽函数.枚举类型.属性.成员函数等. QML访问C++有两个方法:一是在Qt元对象系统中注册C++类,在QML中实例化.访问.二是在C++中实例

matlab与vs混合编程/matlab移植

前言 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程. 在matlab中将.m文件编译生成库文件等供外部的vs程序调用,实现混合编程. 实现步骤 1.matlab中算法代码编译生成库文件.头文件等: 2.创建并配置VS工程: 3.安装配置MCR方便软件移植: 实现环境 matlab版本:matlab2015a vs版本:vs2013 PC系统:win7_x64 实现过程 1.matlab中算法代码编译

java/matlab混合编程应用移植到其他电脑上遇到的问题

问题1:jar包部署在其他电脑上设置vm参数无效 @echo off start java -Xmx1028M -Xms1028M -XX:PermSize=100M -XX:MaxPermSize=100M -XX:SurvivorRatio=8 -jar Edition_1.0_fat.jar 要把参数设置在前面才有效,开始把jar包放前面虽然自己电脑能运行但是其他人的电脑不能运行 问题2:# An unexpected error has been detected by HotSpot