当前位置:
文档之家› 源代码lib静态库adll动态库
源代码lib静态库adll动态库
静态库的编译和使用
若干静态库中使用了 module,那么编译还会产生 mod 文件。 每一个 module 对应一个同名的 mod 文件 mod 文件可以认为是 module 的“概述”,与 C 语言的“头文件”作用相似 但与 C 语言需要自己书写头文件不同,Fortran的 mod 文件由编译器自动生成
当 use Module 时,编译器需要能够找到对应的 mod 文件。 因此,有必要把静态库里产生的 mod 文件保存起来,以便使用静态库时加载
目录
1
什么是lib和dll?
2 静态库的编译和使用
3 动态库的编译和使用
动态库的编译和使用
动态库 DLL,实际上也是可执行文件,与 exe 本质上是一样的。 只不过 dll 通常没有主程序而已。它必须由 exe 在运行以后调用。
易于更新 易于被察觉
代码被多次编译
多个程序使用相同的被拷贝 成多份的代码段
多个程序使用同一份 代码
目录
1
什么是lib和dll?
2 静态库的编译和使用
3 动态库的编译和使用
静态库的编译和使用
静态库 lib,实际上,就是 obj 文件的集合。可以认为是打包在一起的若干 obj 因此它的编译过程是: 1. 编译子程序源代码,得到若干 obj 文件 2. 打包这些 obj 文件,成为 lib 静态库 它的使用过程也比较简单: 编译主程序(或其他子程序),链接时,带上 lib 文件即可
动态库的编译和使用
这两种方法也各有特点:
利用导入库 lib 确定了一定会使用该DLL 如果DLL不存在,则程序无法运行
大多数时候使用该方式
可被 dependency walker 或 ldd 等程序侦察到
利用系统函数动态加载
不一定会用到该 DLL 如果DLL不存在,加载函数会失败
程序可进入另一个执行分支 特别适合书写插件,可选功能
此外,第三方的函数库,例如 IMSL,MKL,Lapack 等,也有lib和dll的形式 如果涉及与其他语言的混编,也经常用到lib和dll
什么是lib和dll?
源代码,lib 和 dll 各有自己的特点:
源代码
lib 静态库(.a)
dll 动态库(.so)
使用者容易修改
使用者不易修改
不易更新,需重新编译 不易被察觉
关于 Fortran Coder
Fortran Coder 始于2006年,是一个以科学计算编程为主题的非盈利性 研讨团体。大多数由各行业高等学府学生,研究人员及生产一线的工作 人员组成。
研讨内容涉及:Fortran77/90/95/2003/2008语法规范,各平台32位及64位编译器,IMSL, MKL,Lapack 等数学函数库,MPI,OpenMP,Coarray 并行及高性能计算,winteracter / DisLin / Matfor / GTKFortran 等绘图及界面库。
我们也不妨多搜集一些他人分享出的劳动结果,在自己的程序里直接使用。 当然我们也可以把我们的代码分享(甚至销售)给其他人。 除了源代码形式的分享外,lib 和 dll 也是常见的分享方式。 我们也可以把一系列(相关联的)函数,封装成 lib /dll 库,以方便自己使用。
什么是lib和dll?
编译
链接
关于 lib 和 dll 的一个比喻:
导入库 lib
什么是lib和dll?
我们的编译器自身,其实就用到了很多静态库和动态库。 很多编译器的运行时库,其实就是“静态库”,甚至可能是“动态库” 比如,IVF 的 ifconsol.lib , ifcoremmd.dll GFortran 的 libc.so libgfortran.so , Silverfrost Ftn95 的 salflibc.dll
本套视频由 Fortran Coder 研讨团队录制,供所有 Fortran 程序员和学习者免费自由的观看,您可 随意的传播它。但请保证视频完整性。
我们将会不定期的更新本套视频,请持续关注我们的网站、QQ群! 同时,如果您对 Fortran 相关有自己的见解,并愿意通过录制视频的方式与其 他人分享,请联系我们!
什么是lib和dll?ห้องสมุดไป่ตู้
源代码分享,就是把源代码直接拿出去,下次使用时添加在新的工程内:
什么是lib和dll?
静态库 lib 就是先把部分源代码编译,并打包成静态库,以后的工程直接链接:
什么是lib和dll?
动态库 dll 就是先把部分源代码编译并链接成动态库,以后的工程可以依赖它运行:
什么是lib和dll?
由于 DLL 具有良好的可维护性,节约内存等特点。 在 windows,linux,mac 等操作系统上,都大量的使用了 DLL 动态库。
动态库的编译和使用
动态库 dll,实际上,是可执行文件。可以认为和 exe 是同类东西 因此它的编译过程是: 1. 编译子程序源代码,得到若干 obj 文件 2. 链接这些 obj 文件(可能包含运行时库一起),得到 DLL 文件 3. 部分平台的编译器会得到导入库 lib 它的使用有两种方法(显示调用,隐式调用): 1. 编译主程序(或其他子程序),链接时,带上导入库 lib 文件 2. 动态的利用系统函数加载 DLL,如 windows 下的 LoadLibrary 和 GetProcAddress
关于本套视频
本套视频以解决实际问题为主要目的,旨在为您解答课本上较少涉及到的实际 问题。通过本套视频,您会更容易了解:
如何查找错误?如何解决错误? 如何学习 Fortran2003 和 Fortran2008 语法? 如何用最通俗易懂的写法解决实际问题? 如何看懂别人的优秀代码并为自己所用?如何让自己的代码更优美、更普适?
第四讲
应用篇 第 四 讲
静态库和动态链接库
讲解人:雪球 gao@ 讨论QQ群:2338021
目录
1
什么是lib和dll?
2 静态库的编译和使用
3 动态库的编译和使用
什么是lib和dll?
大型程序往往不是一个人的劳动成果。 也不是从头到尾全部由一个人或一个团队书写。 合理利用现有的资源,可以起到事半功倍的效果,非常重要。