首頁  >  文章  >  運維  >  linux中動態函式庫和靜態函式庫的差別是什麼

linux中動態函式庫和靜態函式庫的差別是什麼

青灯夜游
青灯夜游原創
2021-11-23 11:08:506240瀏覽

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

linux中動態函式庫和靜態函式庫的差別是什麼

本教學操作環境: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影片教學

以上是linux中動態函式庫和靜態函式庫的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn