linux动态链接库的创建和使用

来源:互联网 发布:景区票务软件 编辑:程序博客网 时间:2024/06/05 06:25

1、准备2个源程序/add.c/
intadd(inta,intb){
returna+b;}
/sub.c/
intsub(inta,intb){
returna-b;}
2、创建共享库
gcc -c -fPIC sub.c gcc -c -fPIC add.c
gcc -shared -fPIC -o libouyang.so sub.o add.o
3、动态加载动态库
所谓动态加载,就是程序自己在运行中,自己加载某个动态库。使用dlopen()打开动态库,dlclose()关闭动态库代码实现如下:

/*main.c*/#include<stdio.h>#include<stdlib.h>#include<dlfcn.h>/*dlopen()等动态库使用函数在dlfcn.h中定义*/int main(void){    int a=30;int b=20;    /*动态库句柄*/    void*handle_dll=NULL;    /*函数指针*/    int(*dl_add)(int,int);    int(*dl_sub)(int,int);    /*打开某个动态库,注意检查打开是否成功*/    handle_dll=dlopen("libouyang.so",RTLD_LAZY);    if(handle_dll==NULL){        printf("libouyang.sonotfound!\n");exit(0);}    /*查找符号表,完整的做法也应该检查符号表查找是否成功*/    dl_add=dlsym(handle_dll,"add");    dl_add=dlsym(handle_dll,"sub");    /*查找符号表成功,可以正常使用动态库中的函数*/    printf("%d+%d=%d\n",a,b,dl_add(a,b));    printf("%d-%d=%d\n",a,b,dl_sub(a,b));    /*关闭动态库*/    dlclose(handle_dll);    handle_dll=NULL;    return 0;}
0 0