FORTRAN动态链接库DLL from《FORTRAN95 程序设计》

在说动态链接库DLL之前,我们要知道什么是库,库有哪些作用,以及如何判别何时用库?

首先,我们要说明一般编译器的工作步骤,我们用fortran编写程序的一般步骤为:写代码阶段->  把程序转为目标文件(*.obj)-> 将得到的一个或多个*.obj文件链接成*.exe  ->运行可执行文件*.exe得到结果 或者调试 。


例如 用G95编译器 编译2个*f90文件 gdemo3.f90 和TextGraphLib.f90 对应得到两个*.o文件,这里要说明的是gdemo3.f90是主程序代码文件,TextGraphLib.f90是一些画图用的函数文件,大家注意到的TextGraphLib.mod文件同样是这个过程编译器生成的,因此这一步主要是编译器的工作。多个目标文件需要链接器(Link)链接起来成为可执行程序,这个过程由链接器完成,在这个过程中Link会自动到fortran标准链接库中找所用到的函数,例如一些类似于sin()或max()这样的数学计算函数等等。因此可以看出实质上库就是已经编译好的目标文件,这样做的目的是减少用户编译工作量,尤其很多数学库是经常用到的。那么这么说本质上很多库文件都是编译好的目标文件,而链接器默默为我们连接这些我们需要的函数。

输入第二行命令行链接器会把两个目标文件链接成gdemo3.exe可执行文件。

在了解整个流程后,我们要说明一下通常我们用VisualFortran在新建Project时候一般都是用Fortran Console Application,而我们接下来要说的静态库,则要用Fortran Static Library格式。这个格式下编译出来的是*.Lib即静态链接库,如同上面所说,他只是提供函数为其他程序调用的作用,那么在应用的时候只要把它和主程序代码一起加入到要编译的Project即可使用。那我们一般说的静态库和动态库有什么区别,其实本质上没有区别,最大的区别在于当我们用的库需要改动的时候,若是静态库,那么这个静态库需要重新编译,而且主函数也要重新编译,这是因为静态库是事先把程序中所需的函数编译成机器码保存在*.LIB中,而编译器在编译主程序时会去*.LIB中找到所需的函数,并把这些函数的机器码复制一份放在执行文件exe中。很显然,这样做我们要重新编译静态库和我们的主函数代码文件,而且因为是复制所需函数的机器码到执行文件中,这使得执行文件体积较大。因此静态链接库是有这两个缺点。那么既然有如上两个缺点,因此出现动态链接库技术,它同样是把需要函数编译成机器码,但是保存在DLL文件上,而不是直接复制到执行文件中,而编译器要做的是告诉exe文件这些函数究竟放到了哪个DLL上,因此相当于我们要的执行文件是DLL+执行文件,这样当我们改动DLL的内容,只需要重新编译DLL就行而执行文件不需要改动。


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值