linux c静态链接库与动态链接库

库函数是我们编程的时候经常用到的,我们协作编程的时候可以将常用的函数封装成库供大家使用,这样能够提高大家的工作效率。对于库函数,它分为动态链接库和静态链接库。对于静态链接库我们必须是连接到可执行文件中的,而动态链接库不需要连接到最终的可执行文件中,也就是说我们删除静态库文件,可执行文件还是能够执行的,但是动态链接中就无法执行了。

在linux中静态链接库文件的后缀是*.a windows下为*.lib

windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。

在静态库情况下,函数和数据被编译进一个二进制文件,编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。

静态链接的一般操作:

(1)首先生成*.o文件,输入gcc -c test.c -o test.o

(2)利用ar命令生成静态库,输入ar rc libtest.a test.o

(3)可执行文件生成    gcc hello.c -o hello ./libtest.a

动态链接一般操作:

(1)生成动态库gcc -shared -fPIC -o libtest.so test.c

(2)生成可执行文件 gcc hello.c -o  hello ./libtest.so

原文地址:https://www.cnblogs.com/weilq/p/3481073.html