中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中動態庫和靜態庫的區別有哪些

發布時間:2021-11-23 11:33:24 來源:億速云 閱讀:169 作者:小新 欄目:建站服務器

這篇文章將為大家詳細講解有關linux中動態庫和靜態庫的區別有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

區別:1、靜態庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態庫;動態庫在程序編譯時并不會被連接到目標代碼中,而是在程序運行時才被載入,因此在程序運行時還需要動態庫存在。2、動態庫產生的文件比較小,靜態庫產生的文件比較大。

本教程操作環境:CentOS 6系統、Dell G3電腦。

linux中動態庫和靜態庫的相同點和區別

相同點:

無論靜態庫,還是動態庫,都是由.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中動態庫和靜態庫的區別有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广平县| 星子县| 朝阳市| 桐庐县| 武清区| 荆门市| 临夏市| 闻喜县| 灌南县| 丹阳市| 南阳市| 揭东县| 饶平县| 莱西市| 湘乡市| 安远县| 巴林左旗| 大洼县| 布尔津县| 米林县| 中方县| 尉氏县| 太原市| 屯昌县| 东方市| 明星| 襄城县| 博湖县| 淮阳县| 静乐县| 济宁市| 西昌市| 平利县| 栾城县| 方山县| 繁峙县| 江阴市| 孝感市| 湖南省| 邵武市| 胶南市|