動態庫建立與鏈結

2021-09-12 19:19:24 字數 1173 閱讀 3411

1、動態庫檔案的建立

(1)編寫原始檔

(2)編譯生成動態庫

g++  -fpic  -shared  -o  libfile_operation.so  file_operation.cpp

此編譯過程分為兩步,等同於下面的兩個命令:

g++  -c  -fpic  file_operation.cpp  

-fpic是編譯選項,pic是position  independent  code的縮寫,表示要生成位置無關的**,這是動態庫的特性

g++  -shared  -o  libfile_operation.so  file_operation.o

-shared是鏈結選項,告訴g++生成動態庫

2、編譯鏈結動態庫生成可執行檔案

g++  main.cpp  -l.  -lfile_operation

-l指定搜尋庫的路徑

-l指定鏈結的庫名稱

執行可執行檔案

上圖可以看到,可執行檔案執行時出錯,原因是找不到動態庫。

linux中,執行需要鏈結動態庫的可執行檔案時,是通過/etc/ld.so.cache檔案搜尋要鏈結的動態庫的。而/etc/ld.so.cache是ldconfig程式讀取/etc/ld.so.conf檔案生成的(此檔案中沒有/lib和/usr/lib路徑,ldconfig程式會預設搜尋這兩個路徑)。

解決此問題有四種方法:

(1)將動態庫所在路徑新增到/etc/ld.so.conf中,然後以root許可權執行以下ldconfig程式,這樣就更新了/etc/ld.so.cache檔案

ld_library_path=. ./a.out

或者先通過如下命令來新增動態庫路徑到環境變數,再直接執行./a.out

export  ld_library_path=$ld_library_path:/home/test (這種設定環境變數的方式,當退出當前終端時就會失效)。

(3)將動態庫放到預設搜尋的路徑中,/lib或者/usr/lib

(4)在生成可執行檔案時就告訴它在指定的路徑找動態鏈結庫,通過-wl, -rpath命令,例如:g++ main.cpp -l. -lfile_operation -wl,-rpath=/home/test

建立動態鏈結庫

要建立dll,就必須首先建立乙個或多個源 檔案,還有乙個連線檔案用來匯出函式。如果打算可以以載入時動態鏈結使用dll的話,還必須建立乙個導入庫。建立原始檔 dll的源 中包含了需匯出的函式及資料,還有內部函式及資料,另外可以有乙個可選的入口函式。你可以使用任意支援建立基於windows的dll工具來...

建立動態鏈結庫

要建立dll,就必須首先建立乙個或多個源 檔案,還有乙個連線檔案用來匯出函式。如果打算可以以載入時動態鏈結使用dll的話,還必須建立乙個導入庫。建立原始檔 dll的源 中包含了需匯出的函式及資料,還有內部函式及資料,另外可以有乙個可選的入口函式。你可以使用任意支援建立基於windows的dll工具來...

如何建立與呼叫動態鏈結庫

靜態鏈結庫與動態鏈結庫區別 靜態鏈結庫 lib中的指令被直接包含在最終生成的exe檔案中。動態鏈結庫 dll不必被包含在最終的exe中,exe檔案執行時可以動態地引用和解除安裝dll檔案。同時,靜態鏈結庫中不能再包含其他的動態鏈結庫或靜態庫,而動態鏈結庫中可以包含其他的動態或靜態庫。vc 支援的dl...