导航:首页 > 源码编译 > Fortran编译成c静态库

Fortran编译成c静态库

发布时间:2023-12-27 19:59:03

‘壹’ 如何编译C/Fortran动态/静态链接库

首先,传统的编译,也就是
静态编译
是把
源文件
翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个
库文件
中,这个就是静态库。比如常说的
库函数
printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过
静态链接
技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个
闭包
。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的
动态库
,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,
动态链接
技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要
动态链接库

‘贰’ Linux下fortran编译链接

so文件是动态库的集合,由f90文件编译而成,此时f90程序中一般不包含program开头的主程序,而只包含mole,例如:

将f90源文件编译为动态库时,使用命令

此时将生成两个文件,分别为bisectmod.mod和lib***.so,这儿的***是刚才自定义的名字,而*.mod文件名则是f90文件中mole的名字,是自动生成的,如果一个f90文件中包含N个mole,则会生成N个*.mod和1个lib***.so。so文件作为库文件,也可以由多个f90文件共同编译得到,相当于静态库中的打包,将多个库打包到一个里,如下:

动态库的使用包含两部分,一是在编译时,二是在程序运行时。
编译包含动态库的主程序时,要同时制定mod文件的路径和so文件的路径,如果mod文件、so文件以及主程序文件在同一目录下,直接指定so文件即可:

但是当使用第三方库时,通常会分别存放在include和lib文件夹中,此时就要单独指定路径了:

第一个参数-I是大写的i,代表include,第二个l是小写的L,代表lib的名字,可以省略lib以及后面的.so,第三个-L则是lib.so文件的路径。

这样编译的结果不能运行,因为运行时程序找不到lib***.so文件,最好的办法是指定LD_LIBRARY_PATH环境变量,当然也可以将lib***.so文件复制到系统的lib文件夹中。

阅读全文

与Fortran编译成c静态库相关的资料

热点内容
猎人宝宝攻击命令 浏览:159
操作系统是编译原理吗 浏览:646
云服务器迁移后 浏览:260
excel格式转换pdf 浏览:987
登录器一般存在哪个文件夹 浏览:535
中兴光猫机器码算法 浏览:330
android响应时间测试 浏览:940
java编程思想第四版答案 浏览:888
如何对nbt编程 浏览:885
mscpdf 浏览:948
文件夹d盘突然0字节可用 浏览:272
吃火腿肠的解压场面 浏览:339
卫星锅加密教程 浏览:792
php7的特性是什么 浏览:469
编译类高级语言源代码运行过程 浏览:177
科普中国app怎么分享 浏览:87
51单片机与32单片机比较 浏览:422
SQL加密存储解密 浏览:507
电气工程师把程序加密 浏览:797
解压切东西动画版 浏览:965