本教程主要解说用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这些个文件之间的关系会感到非常困惑。读懂以下这篇文章也差点儿相同懂了:

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

url=FY5aNAyRmb73cWAaivKZuYY7coJhUm7kDBpQgzpM2X-hoXLPYqo89G_RHhZTk2uAqp7A03ekWw4di2B_ZdASHcSFxf4D9-f4tZELMElWWlC

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

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

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

  1. VS/Qt C++和Matlab混合编程

    最近两天在搞C++和Matlab混合编程,这个中间过程真是让人心酸啊,最后还是搞定成功!现在把这个过程记录一下. 首先自己的电脑本来就安装着matlab2013b,按着网上的说法首先需要输入!mcc, ...

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

    项目设置 既然要聊 Qt 混合 OC 编程,首先要简单介绍一下 Objective C .我只有一句话:Go,问搜索引擎去.因为我所知实在有限,怕误导了您.当然如果您不怕,往下看吧. OC源文件介绍 ...

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

    前言 C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++.并依靠强大的.NET底层框架.C#可以用来快速构建桌面及Web应用.然而在我们的实际工作中,尽管C#已经非常完善,但还是不 ...

  4. Fortran与C混合编程(转自Ubuntu)

    Fortran与C混合编程 由于 GNU 的 Fortran 和 C 语言二者的函数彼此可以直接相互调用,所以混合编程可以非常容易地实现.只要你足够仔细,确保函数调用时传递的参数类型正确,函数就可以在 ...

  5. Fortran与C/C++混合编程示例

    以下例子均来自网络,只是稍作了编辑,方便今后查阅. 子目录 (一) Fortran调用C语言 (二) C语言调用Fortran (三) C++ 调用Fortran (四) Fortran 调用 C++ ...

  6. 【Qt】Qt Quick 之 QML 与 C++ 混合编程详解

    Qt Quick 之 QML 与 C++ 混合编程详解 - CSDN博客   专栏:Qt Quick简明教程 - CSDN博客   .

  7. 在Qt(C++)中与Python混合编程

    一.PythonQt库 在Qt(C++)中与Python混合编程,可以使用PythonQt库. 网站首页:http://pythonqt.sourceforge.net 下载页面:https://so ...

  8. matlab C++ (VS Qt)混合编程 / mxArray / QT5中文乱码

    一.混合编程环境搭建---依据我的情况,分成了4个部分: 1:破解matlab,因为matlab破解不完全,编译器不能使用,会出错.(参考https://blog.csdn.net/a12593012 ...

  9. 【混合编程】C/C++调用Fortran的DLL

    [混合编程]C/C++调用Fortran的DLL 以一个简单的加法器为例,介绍C/C++调用Fortran语言DLL的操作过程 一.Fortran操作 1.1 Fortran代码 首先是加法功能的实现 ...

随机推荐

  1. luogu P2078 朋友

    题目背景 小明在A公司工作,小红在B公司工作. 题目描述 这两个公司的员工有一个特点:一个公司的员工都是同性. A公司有N名员工,其中有P对朋友关系.B公司有M名员工,其中有Q对朋友关系.朋友的朋友一 ...

  2. [CF] 219D Choosing Capital for Treeland

    题意翻译 题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能 ...

  3. vue 运行时 + 编译器 vs. 只包含运行时

    https://cn.vuejs.org/v2/guide/installation.html#运行时-编译器-vs-只包含运行时 文档中的这个地方,说的不清楚 If you need to comp ...

  4. LA 4064 (计数 极角排序) Magnetic Train Tracks

    这个题和UVa11529很相似. 枚举一个中心点,然后按极角排序,统计以这个点为钝角的三角形的个数,然后用C(n, 3)减去就是答案. 另外遇到直角三角形的情况很是蛋疼,可以用一个eps,不嫌麻烦的话 ...

  5. AI学习笔记(01)

    [1]在Ai中,每个对象有两个属性:填充颜色和描边颜色.   [2]在AI中,非要选中,才操作.而PS中,选中图层即可.   [3]AI中,都是路径.   [4]选择工具是选中整个路径,而直接选择工具 ...

  6. 深刻理解下js的prototype

    参考 http://aralejs.org/class/docs/competitors.html, http://www.iteye.com/topic/248933,http://www.cnbl ...

  7. hdu 1689 求奇环bfs关键是层次图

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> usin ...

  8. UltraEdit-14.10.0.1024版本语法着色配置

    用了UltraEdit有段时间了,一直没做语法着色,当做普通文本编辑器使用,这也太委屈这个“神器”了. 今天就让它物尽其用吧.体验一把UltraEdit的语法高亮功能. 参考:http://www.1 ...

  9. 潜伏者(codevs 1171)

    题目描述 Description [问题描述]R 国和S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则:1. ...

  10. BZOJ1710: [Usaco2007 Open]Cheappal 廉价回文

    len<=2000的字符串上,给出删掉和添加每种字符的花费,求把字符串变成回文串的最小花费. 首先每个字符添加和删除是一样的,因此花费在添加和删掉每个字符的花费中取小的. 如果每个字符的花费都是 ...