Linux下編譯製作動態庫和靜態庫

2021-08-14 19:35:15 字數 1134 閱讀 2004

linux 支援兩種型別的庫,每一種庫都有各自的優缺點。靜態庫包含在編譯時靜態繫結到乙個程式的函式。動態庫(也叫共享庫)則不同,它是在載入應用程式時被載入的,而且它與應用程式是在執行時繫結的。linux系統有幾個重要的目錄存放相應的函式庫,如/lib, /usr/lib; 標頭檔案放在/usr/include。

靜態庫靜態庫的名字一般是lib***.a;利用靜態庫編譯成的檔案比較大,因為整個庫的所有資料都被整合進目標**中,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進可執行檔案了。

動態庫

動態庫的名字一般是lib***.so;相對於靜態庫,動態庫在編譯的時候並沒有被編譯進目標**中,程式執行到相關函式時才呼叫函式庫里的相應函式,因此動態庫所產生的可執行檔案比較小。由於函式庫沒有被整合進你的程式,而是程式執行時動態申請並呼叫,所以程式的執行環境中必須提供相應的庫。

靜態庫的製作

第一步:要先把main.c linker.c編譯為main.o linker.o: gcc -c main.c linker.c

第二步:建立乙個名為liblinker.a的靜態庫裡面包含main.o linker.o: 

ar -rcs liblinker.a main.o linker.o

動態庫的製作

建立乙個名為liblinker.so的動態庫:gcc -shared -fpic -o liblinker.so linker.c main.c 編譯

-l  指定庫的路徑     -l   指定庫的名字 ,其中lib和.a/.so 都要省略。

動態庫和靜態庫同時存在,預設是使用動態庫。如果要用靜態庫,加上-static鏈結選項。  

ld_library_path:  告訴系統執行程式的時候,除了/lib, /usr/lib以外還到**找動態庫。

path: 告訴系統執行的linux命令查詢的路徑。

Linux下動態庫和靜態庫的製作

區別 1 靜態庫在編譯的時候被載入,動態庫在執行的之後被載入 2 載入靜態庫編譯所生成的可執行檔案比使用動態庫的方式要大 3 靜態庫以.a為字尾,動態庫以.so為字尾 靜態庫的製作 1.通過gcc c add.c 生成目標檔案 add.o 2.通過ar crs o libadd.a add.o 生成...

linux程式設計動態庫和靜態庫的製作及編譯過程

例如編寫乙個main.c檔案和乙個fun.c檔案 main.c include intadd int int intmain void fun.c int add int a,int b 然後執行此命令 gcc c fun.c此時會生成目標檔案fun.o 執行此命令 ar cr lib a fun....

Linux下動態庫和靜態庫的製作及使用

在實際的開發過程中,編寫程式往往都需要依賴很多基礎的底層庫,比方說平時用的較多的標準c庫,數學庫等等 我們會頻繁的使用這些庫里的函式,這些函式大多數都是前人為我們寫好的,所以值得慶幸的是我們的工作不必從零開始,我們要做的只是在恰當的位置呼叫合適的庫函式去實現相應的功能,充分利用前人的勞動成果,就是 ...