ITKeyword,专注技术干货聚合推荐

注册 | 登录

win64 qt与fortran (codeblocks) 混合编程

fuzimango 分享于 2015-07-16

2020腾讯云7月秒杀活动,优惠非常大!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1040

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

本教程主要讲解用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: 文件->新建->工程->Fortran->Fortran DLL,取个名字我取的dll 这时应该会自动生成一个main.f95文件,直接点黄色齿轮编译就行了。 这时再找到你建工程的文件夹,在\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

本教程主要讲解用fortran生成dll供qt调用(win64) 本教程需要的软件及文件可从下面的连接下载: http://pan.baidu.com/s/1c04jziC fortran我用的软件是codeblocks,这是一款包含基于gfortran的

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。