生成静态链接库和动态链接库
1.静态链接库
首先要生成.o文件
g++ -c test.cpp
然后就生成.a文件就行了
ar -r libtest.a test.o
如此一来我们就生成了静态链接库libtest.a。如果需要使用到这个库文件就直接链接就行了
2.动态链接库
静态链接库是静态的,一旦你将他和某一源文件连接后,它们就直接合体了,静态链接库链接某一源文件后,它们不会合体,只有再程序运行阶段,如果需要用到库文件里面的代码,才会去链接。
动态链接库的优点很多:
节省空间,由于动态链接库不会和源文件合体,所以可以很多源文件共享一份动态库;如果你使用的是静态库的话,就要把静态库和每一个源文件合体,就会导致多份静态库可以随时更新动态库文件,运行程序的时候,链接的永远都是最新的库文件
第一步还是生成.o文件,
这里必须加入
-fPIC
,这是为了生成位置无关代码,一来它真正意义上实现动态库共享,二来,我们可以在库文件中使用#include
代码,如果你不加fPIC
,那么动态库就不能使用include其他文件了(这是因为动态库是在运行阶段才会被链接的,这时链接库文件中的include只是对这个库文件是有效的,等这个内容加载到程序空间中时,地址就无法使用)对于静态库来说
-fPIC
选项可以不加,因为静态库文件是和源文件合体了,#include自然对源文件有效。
g++ -c -fPIC test.cpp
第二步是生成.so文件
g++ -shared -o libtest.so test.o
现在我们就生成了 .so动态库文件了,再将该库文件和源代码链接后,生成可执行程序。在执行这个可执行程序的时候,一般我们要指定它使用的动态链接库的路径,例如a.out
使用了某一动态链接库
那么我们再只需a.out
时,必须这样:
LD_LIBRARY_PASH=动态链接库路径 a.out
如果不加,那么它就会从默认路径下找动态链接库