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