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