linux系統應用學習(三) 動態庫靜態庫

2021-09-16 21:06:03 字數 1212 閱讀 4401

庫檔案:一般指第三方提供的可呼叫的庫函式檔案,庫檔案封存的是函式體,即.c檔案裡面的內容。

動態庫      靜態庫

windows下:        xx.dll              xx.lib

linux 下:             xx.so              xx.a

靜態庫和動態庫都是已經編譯好的目標檔案

靜態庫:在應用程式編譯鏈結的時候,用到庫函式的地方,會從靜態庫把函式體(二進位制檔案)拷貝到應用程式的呼叫處,執行時和靜態庫沒關係。

1.準備庫函式原始檔***.c   yyy.c  ***.h

2.把原始檔編譯成目標檔案 gcc -c  ***.c  -o  ***.o

gcc -c  yyy.c  -o  yyy.o

3.生成靜態庫檔案

ar  -r  lib***.a   ***.o  yyy.o

4.使用靜態庫

5.編寫應用程式原始檔

zzz.c 

6.編譯應用程式

如果直接加在系統路徑下(/lib),-l這個從引數就不用加了。

gcc  zzz.c  -l***    -l./  -o  zzz

-l  //指定用到的庫檔案

-l  //指定庫檔案存放的路徑

7.執行

./zzz

1.建立動態庫

編寫庫的原始檔  ***.c   yyy.c

編譯成目標檔案  gcc  -c  ***.c  -fpic  -o  ***.o  |  gcc  -c  yyy.c  -fpic  -o  yyy.o

生成動態庫     gcc  -shared    ***.o  yyy.o   -o  libxx.so

2.使用動態庫

編寫應用程式 main.c

編譯應用程式 gcc  main.c  -lxx   -l./  -o  main

執行方式一:

library_path   //記錄編譯時動態或靜態庫的系統路徑

ld_library_path   //記錄程式執行時動態庫路徑

export  ld_library_path=./:$ld_library_path

方式二:

把動態庫複製到/usr/lib 中

把頭檔案複製到/usr/include中

優缺點:靜態庫相比動態庫**量大,但是它容易部署。

動態庫則相反,但動態庫還容易維護和公升級。

Linux生成動態庫系統

linux下動態庫檔案的擴充套件名為 so shared object 依照約定,全部動態庫檔名稱的形式是libname.so 可能在名字中增加版本 這樣。執行緒函式庫被稱作libthread.so。靜態庫的檔名稱形式是libname.a。共享archive的檔名稱形式是libname.sa。共享a...

linux系統下Qt動態庫鏈結

在a環境下編譯的qt程式,放到b環境下未編譯直接執行後出現了 libqt5network.so.5 version qt 5 not found libqt5gui.so.5 version qt 5 not found libqt5core.so.5 version qt 5 not found ...

linux系統下動態庫的建立

需求 以建立乙個加減法功能的動態庫為例。1 分別建立乙個加減法的庫函式 add.c,sub.c int add int a,int b int sub int a,int b 2 將庫函式檔案生成目標檔案 gcc c sub.c add.c fpic add.o,sub.o 3 將目標檔案分裝成庫 ...