您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關linux中動態庫和靜態庫的區別有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
區別:1、靜態庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態庫;動態庫在程序編譯時并不會被連接到目標代碼中,而是在程序運行時才被載入,因此在程序運行時還需要動態庫存在。2、動態庫產生的文件比較小,靜態庫產生的文件比較大。
本教程操作環境:CentOS 6系統、Dell G3電腦。
相同點:
無論靜態庫,還是動態庫,都是由.o文件創建的。因此,我們必須將源程序通過gcc先編譯成.o文件;
區別:
1、代碼載入時間不同
靜態庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態庫;
動態庫在程序編譯時并不會被連接到目標代碼中,而是在程序運行時才被載入,因此在程序運行時還需要動態庫存在
2、編譯規則不同
動態庫編譯
動態類庫的名字一般是libxxx.so,動態函數庫在編譯的時候 并沒有被編譯進目標代碼中,你的程序執行到相關函數時才調用該函數庫里的相應函數,因此動態函數庫所產生的可執行文件比較小;
動態庫編譯時:最主要的是GCC命令行的一個選項, -shared 該選項指定生成動態連接庫, 例如:
g++ -shared -o libd1.so d1.o /*根據中間目標文件d1.o創建動態庫文件d1.so*/
g++ -shared -o libd2.so d2.o /*根據中間目標文件d2.o創建動態庫文件d2.so*/
靜態庫編譯
類庫的名字一般是libxxx.a;利用靜態函數庫編譯成的文件比較大,因為整個 函數庫的所有數據都會被整合進目標代碼中,他的優點就顯而易見了,即編譯后的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。當然這也會成為他的缺點,因為如果靜態函數庫改變了,那么你的程序必須重新編譯。
UNIX中,使用ar命令創建或者操作靜態庫
ar archivefile objfile
archivefile:archivefile是靜態庫的名稱
objfile:objfile是已.o為擴展名的中間目標文件名,可以多個并列;
例如:
g++ -o hello.o -c hello.cpp ar cqs libHello.a hello.o
關于“linux中動態庫和靜態庫的區別有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。