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

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 ”

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容