Linux 靜態庫及動態庫

2021-08-09 08:59:04 字數 1710 閱讀 2037

庫的製作和使用:

什麼是庫:

1 庫是二進位制**

2 庫是加了密的源**

3 庫是功能相近或者相似的函式的集合

庫的作用:

1 **的復用性, 提高了軟體開發的效率, 而且穩定安全.

庫的製作:

庫分為靜態庫和動態庫

庫的名字: libtest1.a

材料: main.c fun1.c fun2.c head.h

main.c檔案中呼叫了fun1.c和fun2.c中的函式

head.h檔案中有fun1和fun2函式的宣告

靜態庫的製作:

1 gcc fun1.c -o fun1.o

gcc fun2.c -o fun2.o

2 ar rcs libtest1.a fun1.o fun2.o

動態庫的製作:

1 gcc -c -fpic fun1.c fun2.c 

2 gcc -shared fun1.o fun2.o -o libtest2.so  

(可一步生成 gcc -shared -fpic fun1.c fun2.c -o libtest2.so)

庫的使用:

gcc main.c -i./ -l./ -ltest2  -o main

庫的發布:

1 提供標頭檔案

2 提供庫檔案

動態庫找不到的問題分析和解決:

./main: error while loading shared libraries: libtest2.so: cannot open shared object file: no such file or directory

原因: 在執行的時候會根據路徑去找動態庫, 若找不到就會報錯.

1 /usr/lib /lib

2 export ld_library_path=./:$ld_library_path        (echo  ld_library_path)

3 在使用者的配置檔案.bashrc裡面新增export ld_library_path=./:$ld_library_path

然後執行. ~/.bashrc(或source ~/.bashrc)

4 在/etc/profile裡面新增export ld_library_path=./:$ld_library_path,

然後. /etc/profile

5 在/etc/ld.so.conf裡面新增庫的絕對路徑, 然後執行sudo ldconfig -v使配置生效  

(export 檢視環境變數

export | grep lib 檢視lib環境變數

unset ld_library_path 刪除環境變數)

ldd main檢視使用了哪些庫

nm main 檢視有哪些函式 (-u 檢視未定義函式)

動態庫和靜態庫的優缺點:

靜態庫的優點:

1 執行速度快, 是因為靜態庫已經編譯到可執行檔案內部了

2 移植方便, 不依賴域其他的庫檔案

缺點: 

1 耗費記憶體, 是由於每乙個靜態庫的可執行程式都會載入一次

2 部署更新麻煩, 因為靜態庫修改以後所有的呼叫到這個靜態庫的可執行檔案都需要重新編譯

動態庫的優點:

1 節省記憶體

2 部署公升級更新方便, 只需替換動態庫即可,然後再重啟服務

缺點: 

1 載入速度比靜態庫慢

2 移植性差

linux庫及靜態庫及動態庫的建立

庫 庫是一組預先編譯好的函式的集合,這些函式都是按照可重用的原則編寫的。它們通常由一組相互關聯的函式組成以執行某項常見任務,比如螢幕處理函式庫和資料庫訪問例程。庫分為靜態和動態庫兩種,這裡先介紹一下靜態庫的建立。linux的庫一般在 lib或 usr lib目錄下。lib是庫 library 的英文...

linux 靜態庫 動態庫

1.概念和區別 靜態庫就是在編譯過程中一些目標檔案的集合。靜態庫在程式鏈結的時候使用,鏈結器會將程式中使用到函式的 從庫檔案中拷貝到應用程式中。一旦鏈結完成,在執行程式的時候就不需要靜態庫了。由於每個使用靜態庫的應用程式都需要拷貝所用函式的 所以靜態鏈結的檔案會比較大。相對於靜態函式庫,動態函式庫在...

linux 靜態庫 動態庫

linux支援兩種庫的型別 靜態庫和動態庫 共享庫 1.linux靜態庫和動態庫的命名規則 靜態函式庫 lib a 動態函式庫 lib so 這些庫檔案都是由 o檔案生成的 動態庫 程式執行過程中進行連線。可執行檔案 庫檔案 靜態庫 編譯時進行連線。庫檔案 的複製貼上過程。程式執行時先檢查依賴的庫檔...