zoukankan      html  css  js  c++  java
  • 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文件放在:CodeBlocksshareCodeBlockslocalezh_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-64in下的。


    例如以下图:



    2、用codebolcks生成dll:

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


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


    这时再找到你建project的目录,在inDebug目录下应该有这三个文件,我们仅仅须要当中的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-Debugdebug目录下


    在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


  • 相关阅读:
    纯JS.CSS编写的可拖拽并左右分栏的插件(复制代码就能用)
    jquery on()方法重复绑定解决方法
    在PHP语言中使用JSON和将json还原成数组
    Flex 布局教程:语法篇
    在线生成大全(这里真的什么都有)
    css3(border-radius)边框圆角详解
    css常用鼠标指针形状代码
    input 正则限制输入内容
    html中input标签的tabindex属性
    CSS gradient渐变之webkit核心浏览器下的使用
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6816710.html
Copyright © 2011-2022 走看看