1. 生成方式
静态库:
首先将源文件编译成目标文件:gcc –c test.c -o test.o
然后生成静态库:ar –rc libstatic.a test.o
共享库:
首先将源文件编译成目标文件:gcc –c test.c -o test.o
生成共享库:gcc –fPIC –shared –o libshared.so test.o
静态库的链接方法:
gcc –o software_name -L. –lstatic main.c (默认库在当前文件夹)
共享库的链接方法:
gcc –o software_name -L. –lshared main.c(默认库在当前文件夹)
2. 存在周期
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
3.加载时间
二者的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。
4.如何使用
静态库直接编译到程序里面;
动态库可以通过设置环境变量来告知其地址使用:
export LD_LIBRARY_PATH='/home/lib'
注意:若静态库和动态库同名, gcc命令将优先使用动态库。