[C++] 靜態鏈接庫和動態鏈接庫的區別


靜態鏈接庫和動態鏈接庫的區別

一、靜態鏈接庫

預編譯->編譯->匯編->鏈接

Linux:

生成目標文件

g++ -c source.cpp -o source.o

打包成靜態鏈接庫

ar -crv source.a source.o

使用靜態鏈接庫

g++ test.cpp -L靜態鏈接庫目錄 -l靜態鏈接庫名稱沒有后綴

 

二、動態鏈接庫

使用動態鏈接庫是為了規避靜態鏈接庫的兩個問題。

一個是多個副本的問題,對於靜態庫都是在編譯時刻將其編譯到源代碼當中,在運行時刻不會再和靜態庫有任何關系。這樣的好處是快,但是造成了空間的浪費

另一個是發布的一致性問題和更新問題,如果是靜態庫,如果對靜態庫進行了更新,那么需要重新編譯代碼,並且提示用戶進行下載整個軟件,這樣會造成很多不變,浪費大量帶寬。如果是動態庫,只需要更新相應的動態鏈接庫即可,整個軟件不需要修改。

Linux平台:

生成目標文件

g++ -fPIC source.cpp -o source.o

動態鏈接庫

g++ -shared source.so source.o

或者合並為一個命令

g++ -fPIC -shared source.so source.cpp

關於在使用中定位動態鏈接庫的位置,需要注意一些問題,默認動態鏈接庫是在/lib 或者 /usr/lib之下的

如果要在其他文件夾之下,需要修改 /etc/ld.so.cache文件

 

[1] http://www.cnblogs.com/skynet/p/3372855.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM