美文网首页Programing Language
Fortran(11)-静态库和动态链接库

Fortran(11)-静态库和动态链接库

作者: Hello育种 | 来源:发表于2021-05-10 14:35 被阅读0次

    lib与dll库

    lib为静态库,把源代码编译,打包生成.lib文件,以后的工程可直接链接。很多编译器的运行时库可能就是静态库,
    dll为动态库,把源代码编译,并链接成动态库,以后的工程需要依赖这个动态库。
    第三方的函数库,也有lib和dll,语言混编也需要用到这个。

    image.png

    lib静态库

    是obj文件的obj文件的集合。
    编译过程是: 1 编译子程序源代码,得到若干obj文件;2打包这些obj文件,成为lib静态库
    使用:编译主程序时, 链接时,带上lib文件即可。

    如果静态库使用了module,那么编译还会产生mod文件。
    mod文件认为module的概述,与C语言的头文件类似。不同编译器生成的mod不能通用
    加载使用静态库时,需要保存mod文件。
    打包:ar rv my.lib func.o sub.o !使用func.o和sub.o生成my.lib.
    gfortran -c main.f90 !编译main.f90文件
    gfortran main.o my.lib -o x.exe !链接静态库

    DLL动态文库

    DLL实际上也是可执行文件,只是其通常没有主程序,它必须有exe在运行以调用。
    其具有良好的可维护性,节约内存,在windows,Linux,mac等操作系统上,都大量使用DLL文件。
    其编译及使用:


    image.png image.png

    命令行实现

    gfortran sub.f90 func.f90 -shared -fPIC -o libfcode.so !生成动态文库
    gfortran main.f90 libfcode.so -o x.exe !链接主程序, 并且需要使用export LD_LIBRARY_PATH=./设置为搜索当前目录
    ldd x.exe!查看程序依靠哪些库
    函数调用时区分大小写
    Inter fortran 中注释, 需要加“!DEC$ ATTRIBUTES DLLEXPORT,ALLAS:"sub"::sub ”

    相关文章

      网友评论

        本文标题:Fortran(11)-静态库和动态链接库

        本文链接:https://www.haomeiwen.com/subject/nygcxltx.html