鏈接過程

本文均來自狄泰軟件學院


鏈接器的主要作用是把各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確的銜接


靜態鏈接

由鏈接器在鏈接時將庫的內容直接加入到可執行程序中


Linux下靜態庫的創建和使用

編譯靜態庫源碼:gcc -c lib.c -o lib.o

生成靜態庫文件:ar -q lib.a lib.o

使用靜態庫編譯:gcc main.c lib.a -o main.out


動態鏈接

可執行程序在運行時才動態加載庫進行鏈接

庫的內容不會進入可執行程序當中


Linux下動態庫的創建和使用

編譯動態庫源碼:gcc -shared dlib.c -o dlib.so

使用動態庫編譯:gcc main.c -ldl -o main.out

關鍵系統調用

   dlopen:打開動態庫文件

   dlsym:查找動態庫中的函數並返回調用地址

   dlclose:關閉動態庫文件


void* pdlib = dlopen("./dlib.so",RTLD_LAZY);


char* (*pname) ();

int (*padd) (int,int)

 

if (pdlib!=NULL)

{

pname = dlsym(pdlib,"name");

padd = dlsym(pdlib,"add");


if ( (pname!=NULL) && (padd!=NULL) )

{

printf("Name:%s\n",pname());

printf("Result:%d\n",padd(2,3));

}

dlclose(pdlib);

}


鏈接是指將目標文件最終鏈接爲可執行程序

根據鏈接方式的不同,鏈接過程可以分爲:

靜態鏈接:目標文件直接鏈接進入可執行程序

動態鏈接:在程序啓動後才動態加載目標文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章