1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 生成静态链接库和动态链接库

生成静态链接库和动态链接库

时间:2020-02-03 11:24:17

相关推荐

生成静态链接库和动态链接库

生成静态链接库和动态链接库

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

如果不加,那么它就会从默认路径下找动态链接库

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。