链接过程

本文均来自狄泰软件学院


链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接


静态链接

由链接器在链接时将库的内容直接加入到可执行程序中


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);

}


链接是指将目标文件最终链接为可执行程序

根据链接方式的不同,链接过程可以分为:

静态链接:目标文件直接链接进入可执行程序

动态链接:在程序启动后才动态加载目标文件

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