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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编译C/Fortran动态/静态链接库相关的知识,希望对你有一定的参考价值。

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

以上是关于如何编译C/Fortran动态/静态链接库的主要内容,如果未能解决你的问题,请参考以下文章

C/C++编译问题,静态库,动态库。

C/C++不能运行时动态编译代码,编写公式编辑器,用户输入循环判断语句保存后执行该怎么实现啊?

请问,ld链接生成的时候,加载动态库/静态库顺序如何?

Linux下C/C++动态库在运行时是怎样加载进来的

Linux下C/C++动态库在运行时是怎样加载进来的

Linux下C/C++动态库在运行时是怎样加载进来的