gcc -fpic -c math.c -o math.o //自行編寫他們的標頭檔案放在同一目錄下
gcc -fpic -c show.c -o show.o
gcc -shared math.o show.o -o libmath.so 為動態庫,lib***其中 *** 為動態庫的名字
export ld_library_path=$ld_library_path:. //.表示當前目錄
動態載入是在程式執行期間載入和解除安裝動態庫。linux中的dl庫實現庫的動態載入。最終鏈結時,使用-ldl。gcc main.c libmath.so -o math //生成math,執行./math
或gcc main.c -l./ -lmath -o math
#include void *dlopen(const char *filename,int flag);
char *dlerror(void);
void *dlsym(void *handle,const char *symbol);
int dlclose(void *handle);
link with -ldl
void *dlopen(const char *filename,int flag);
--filename:如果有路徑,按照路徑載入;只有檔名時,根據ld_library_path環境變數去查詢
--flag:載入標誌(rtld_lazy:延遲載入,什麼時候真正使用,什麼時候載入;rtld_now:立即載入)
--返回值:成功返回動態庫的控制代碼,失敗返回null
void *dlsym(void *handle,const char *symbol);
--handle:動態庫的控制代碼
--symbol:函式名
int dlclose(void *handle);
--handle:動態庫控制代碼
char *dlerror(void);
--返回值:返回錯誤字串
#include#includetypedef int(*pfunc_call)(int,int);
typedef int(*pfunc_show)(int); //給函式指標定義乙個別名 pfunc_show = int(*)(int)
int main()
//獲取函式位址
pfunc_call add = (pfunc_call)dlsym(handle,"add");
if(add==null)
int(*show)(int)= dlsym(handle,"show"); //int(*show)(int) = pfunc_show
if(add==null) // 函式原型 int show(int)
show(add(9,5));
dlclose(handle);
return 0;
}
gcc dmain.c -ldl -o math
ar rc math.a math.o
gcc main.c -o main.o
gcc -o main2 main.o -l./ -lmath
VC 載入動態庫和靜態庫
靜態庫包括.lib和.h檔案,在工程中使用靜態庫分為3步 1在工程中加入靜態庫,有兩種方法 方法一 專案設定中引用.lib,project setting link object library modules中新增.lib 需要在tools options設定正確的引用路徑 方法二 在專案中直接加...
Apache模組動態載入和靜態載入
在 使用.configure 編譯的時候,如果不指定某個模組為動態,即沒有使用 enable mods shared module 或者enable module shared這個2 個中的乙個,那麼所有的預設模組為靜態。那麼何謂靜態?其實就是編譯的時候所有的模組自己編譯進 這個檔案中 我們啟動可以...
Apache模組動態載入和靜態載入
這裡我來解釋下什麼叫動態載入和靜態載入?說簡單,並用打比喻的方式來解釋.好比有兩個人a和m a代表apache,m代表module 要想讓a使用m的東西 乙個方法是把m的東西都放到a那裡去,a使用的時候就是現成的了 就是所謂的靜態編譯 還有乙個方法,就是告訴a,m的住址,當a要使用m的東西的時候,a...