linux下庫檔案有兩種:一是靜態庫檔案,以.a為字尾的檔案。二是動態庫檔案,以.so為字尾的檔案。其二者主要區別在於靜態庫是在編譯時載入,而動態庫是在執行時載入。
關於靜態庫檔案使用比較繁多,在makefile中的使用如下例:
libs = -l./ -l$(rootpath)/lib/ \
-ltest
這裡載入的靜態庫檔案是libtest.a。
如果想要使用動態庫中的介面函式,可以使用兩種方法。
方法1:
extern "c" int testso1(param1,param2,...);
int testso1(param1,param2,...)
其他地方應用的時候需要利用
#include
#include
typedef int (*fun)(char *,int);
dp=dlopen("./libtestso.so",rtld_lazy);
pfunction=(fun)dlsym(dp,"testso1");
(*pfunction)(strcode,512);
方法2:
將需要的的介面函式放到乙個標頭檔案中宣告,其他地方引用時只需包含磁頭檔案。makefile中需要寫明.so檔案的全稱,及準確的路徑。
通過對兩種檔案的比較,個人認為,方法1在c呼叫c++的方法時效果明顯。方法2在c++呼叫c++中其他元件方法時效果很好。方便易行!
Linux下動態庫 so 和靜態庫 a
一般情況下,在專案裡會把功能相似的 封裝成庫,方便使用和管理,同時增加了 的內聚性。庫分為兩種,一種為靜態庫,檔名以.a結尾,另一種是動態庫,檔名以.so結尾。靜態庫和動態庫的使用各有利弊。靜態庫的特點 動態庫的特點 現在用乙個微型的工程,來講述靜態庫 動態庫的生成和使用。假設有3個.c檔案,分別為...
Linux下編譯靜態庫 a 和動態庫 so
靜態庫 在linux環境中,使用ar命令建立靜態庫檔案.如下是命令的選項 d 從指定的靜態庫檔案中刪除檔案 m 把檔案移動到指定的靜態庫檔案中 p 把靜態庫檔案中指定的檔案輸出到標準輸出 q 快速地把檔案追加到靜態庫檔案中 r 把檔案插入到靜態庫檔案中 t 顯示靜態庫檔案中檔案的列表 x 從靜態庫檔...
linux下動態庫( so 的路徑問題
最近在使用wxwidgets,這是乙個跨平台的c 庫,在linux下編譯成動態庫 so 如果將編譯後的可執行檔案發布到其他機器的linux系統中,需要帶上.so檔案,這就需要設定一下這些動態庫的路徑,一般可以使用環境變數ld library path來設定,可以在終端中直接輸出如下的命令 expor...