庫檔案:一般指第三方提供的可呼叫的庫函式檔案,庫檔案封存的是函式體,即.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 將目標檔案分裝成庫 ...