共享庫 動態庫

2022-03-04 07:37:41 字數 1277 閱讀 8452

動態庫的命名規則:lib+庫的名字+.so

libmyname.so

動態庫的建立和使用【共享庫】

步驟一:生成對應的.o檔案【.c --> .o】

gcc -fpic -c *.c -i ../include 生成與位置無關的.o檔案【-fpic 與位置無關】

步驟二:將生成的.o檔案打包成動態庫.so檔案

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

步驟三:發布動態庫生成可執行檔案

方式一:

gcc main.c lib/libmycaldll.so -o mysumdll.out -iinclude

方式二:

gcc main.c -iinclude -l lib -l mycaldll -o mysum

ldd mysum.out 檢視可執行檔案在執行過程中所依賴的所有的共享庫

結果:linux-vdso.so.1 => (0x00007ffd36291000)

lib/libmycaldll.so (0x00007f1a1e81a000)

libc.so.6 => /lib64/libc.so.6 (0x00007f1a1e44c000)【標準c庫】

/lib64/ld-linux-x86-64.so.2 (0x00007f1a1ea1c000)【動態鏈結器】

mysum.out可執行檔案使用【動態鏈結器】呼叫它所依賴的動態庫

方法一:臨時測試

在環境變數 ld_library_path 中新增要載入的動態鏈結庫的路徑,

之後動態鏈結器呼叫可執行檔案依賴的動態庫時會先在 ld_library_path中查詢

之後再從預設的環境變數 path 裡面按順序查詢

注意:該方法只能在測試中臨時使用,關閉終端設定失效

export ld_library_path=./lib【export 匯入到系統的環境變數中】

方法二:永久設定

在當前使用者家目錄下的隱藏檔案.bashrc中新增

export ld_library_path=/root/testdandan/calculator/lib【動態庫的絕對路徑】

.bashrc生效需要重啟終端

方法四:永久設定

1).需要找到動態鏈結器的配置檔案 /etc/ld.so.conf

2).將動態庫的絕對路徑寫到配置檔案中 /root/testdandan/calculator/lib

3).更新配置

ldconfig -v

動態庫 共享庫Shared Object

動態庫或者稱為共享庫,是共享 的另外一種實現方式。其特徵是在程式實際執行時,動態地載入所呼叫的函式或變數等符號,這樣可以減小應用程式檔案的尺寸 而且遇到功能公升級或者修復bug時只要更新庫檔案就可以了,不必更新應用程式。在windows環境中,對應的動態庫常以 dll檔案形式存在,意為dynamic...

靜態庫,共享庫,動態載入庫

一 靜態庫 1.概念 靜態庫就是一些目標檔案的集合,以.a結尾。靜態庫在程式鏈結的時候使用,鏈結器會將程式中使用 到函式的 從庫檔案中拷貝到應用程式中。一旦鏈結完成,在執行程式的時候就不需要靜態庫了。由於每個使用靜態庫的應用程式都需要拷貝所用函式的 所以靜態鏈結的檔案會比較大。2.建立與應用 首先建...

動態鏈結共享庫

靜態庫有一些明顯的缺陷,它與所有的軟體一樣,需要定期維護和更新。如果應用程式設計師想要使用乙個庫的最新版本,他們必須以某種方式了解到該庫的更新情況,然後顯示的將他們的程式與更新了的庫重新鏈結。其次,幾乎每乙個c程式都使用了標準i o函式,執行時這些函式的 會被複製到每個執行程序的文字段中,在執行上百...