您的位置:首页 > 运维架构 > Linux

linux下动态链接库的使用

2014-04-02 00:43 411 查看
(1)gcc -c -fpic add.c sub.c

(2)gcc -shared add.c sub.c -o libmath.so

(3)gcc main.c -ldl

就可以产生动态链接的结果了

让我写下使用动态链接库的几个函数吧

void * dlopen(const char *filename, int flag);

filename 是动态链接库的名字

flag的值是

RTLD_LAZY  等到共享库的使用时才加载

RTLD_NOW  立即加载

成功返回共享句柄 ,失败返回NULL

void *dlsym(void * handle, const char * symbol)

从共享句柄中查找处函数名

int dlclost(void *handle)

关闭共享句柄

char *dlerror(void);

返回错误信息的字符串,没有错误信息返回NULL

add.c

int add(int a,int b){
return a + b;
}

sub.c

int sub(int a,int b){
return a - b;
}

main.c

#include<stdio.h>
#include<dlfcn.h>
typedef int(*FUN)(int ,int );
int main()
{
void *handle = dlopen("./libmath.so",RTLD_NOW);
if (!handle){
printf("error %s\n",dlerror());
return -1;
}
FUN add = (FUN) dlsym(handle,"add");
if (!add){
printf("error %s\n",dlerror());
return -1;
}
FUN sub = (FUN) dlsym(handle,"sub");
if (!sub){
printf("error %s\n",dlerror());
return -1;
}
printf("1 + 5 = %d\n",add(1,5));
printf("3 - 10 = %d\n",sub(3,10));
dlclose(handle);
return 0;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态链接 linux