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
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
这时应该会自己主动生成一个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_
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
6、关于makefile和编程原理:
相信非常多人和我一样对.lib/.a、.dll/.so、.obj/.o这些个文件之间的关系会感到非常困惑。读懂以下这篇文章也差点儿相同懂了:
url=FY5aNAyRmb73cWAaivKZuYY7coJhUm7kDBpQgzpM2X-hoXLPYqo89G_RHhZTk2uAqp7A03ekWw4di2B_ZdASHcSFxf4D9-f4tZELMElWWlC
还有这篇关于makefile使用方法的一些归纳:
win64 qt与fortran (codeblocks) 混合编程的更多相关文章
- VS/Qt C++和Matlab混合编程
最近两天在搞C++和Matlab混合编程,这个中间过程真是让人心酸啊,最后还是搞定成功!现在把这个过程记录一下. 首先自己的电脑本来就安装着matlab2013b,按着网上的说法首先需要输入!mcc, ...
- Qt for iOS,Qt 与Objective C混合编程
项目设置 既然要聊 Qt 混合 OC 编程,首先要简单介绍一下 Objective C .我只有一句话:Go,问搜索引擎去.因为我所知实在有限,怕误导了您.当然如果您不怕,往下看吧. OC源文件介绍 ...
- [转载:]C#与Fortran混合编程之本地调用Fortran动态链接库
前言 C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++.并依靠强大的.NET底层框架.C#可以用来快速构建桌面及Web应用.然而在我们的实际工作中,尽管C#已经非常完善,但还是不 ...
- Fortran与C混合编程(转自Ubuntu)
Fortran与C混合编程 由于 GNU 的 Fortran 和 C 语言二者的函数彼此可以直接相互调用,所以混合编程可以非常容易地实现.只要你足够仔细,确保函数调用时传递的参数类型正确,函数就可以在 ...
- Fortran与C/C++混合编程示例
以下例子均来自网络,只是稍作了编辑,方便今后查阅. 子目录 (一) Fortran调用C语言 (二) C语言调用Fortran (三) C++ 调用Fortran (四) Fortran 调用 C++ ...
- 【Qt】Qt Quick 之 QML 与 C++ 混合编程详解
Qt Quick 之 QML 与 C++ 混合编程详解 - CSDN博客 专栏:Qt Quick简明教程 - CSDN博客 .
- 在Qt(C++)中与Python混合编程
一.PythonQt库 在Qt(C++)中与Python混合编程,可以使用PythonQt库. 网站首页:http://pythonqt.sourceforge.net 下载页面:https://so ...
- matlab C++ (VS Qt)混合编程 / mxArray / QT5中文乱码
一.混合编程环境搭建---依据我的情况,分成了4个部分: 1:破解matlab,因为matlab破解不完全,编译器不能使用,会出错.(参考https://blog.csdn.net/a12593012 ...
- 【混合编程】C/C++调用Fortran的DLL
[混合编程]C/C++调用Fortran的DLL 以一个简单的加法器为例,介绍C/C++调用Fortran语言DLL的操作过程 一.Fortran操作 1.1 Fortran代码 首先是加法功能的实现 ...
随机推荐
- 乘法逆元-洛谷-P3811
题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...
- Django考试系统(1)
好久没更过博客了,菜是原罪.毕业设计快做完了,第一次独立做的项目(考试系统),自己摸索着做的,以前学习的好多东西都用上了,但是也都忘了,完成设计的途中又一步步的捡起来了(不知道现在还记没记得).最近着 ...
- openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题
基于openjdk:8u171-alpine构建的java镜像,使用jstack命令打印线程的时候会提示以下错误: /opt # ps -ef PID USER TIME COMMAND 1 root ...
- while循环处理列表和字典
一.在列表之间移动元素 假设有一个列表,里面存放的是网站新注册但没有验证的用户,验证这些用户后,如何将它们移动到另一个已验证用户列表中呢? 其中一种方法是使用while循环,在验证用户的同时,将其从未 ...
- mysql数据库中的索引有那些、有什么用
本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第 ...
- mac下出现xcrun: error导致git无法使用的解决办法
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun BY ...
- JavaScript高级程序设计中第2、3章中细节知识点
第2章 1.<script src='script.js' type='text/javascript'></script>中,只要不包含defer和async属性,浏览器都会 ...
- luogu1856 [USACO5.5]矩形周长Picture
看到一坨矩形就要想到扫描线.(poj atantis) 我们把横边竖边分开计算,因为横边竖边其实没有区别,以下论述全为考虑竖边的. 怎样统计一个竖边对答案的贡献呢?答:把这个竖边加入线段树,当前的总覆 ...
- Python工程师面试题目
1.请尽可能列举python列表的成员方法,并给出一下列表操作的答案: len() 返回列表中的元素数量. max() 返回列表中的最大元素.最大元素的判断依据是列表中的对象类型.数字列表中的最大元素 ...
- UVA10200-Prime Time/HDU2161-Primes,例题讲解,牛逼的费马小定理和欧拉函数判素数。
10200 - Prime Time 此题极坑(本菜太弱),鉴定完毕,9遍过. 题意:很简单的求一个区间 ...