静态链接库libxxx.a的制作和使用
- 编辑add.h、add.c、test.c文件
//add.h #ifndef __XXX__H__ #define __XXX__H__ int add(int a, int b); #endif //--------------------- //add.c #include“add.h” int add(int a, int b){ return a+b; } //--------------------- //test.c #include<stdio.h> #include"add.h" int main(int argc, char* argv[]){ printf("1+2=%d", add(1, 2)); return 0; }
- 编译生成libadd.a库文件
gcc add.c -c -o add.o ar crv libadd.a add.o
- 编译生成test测试程序
gcc test.c -L. -ladd -o test
- 运行test测试程序
./test
- 运行结果
动态链接库libxxx.so的制作和使用
- 代码同静态链接库部分
- ……
- 使用动态链接库方式一
gcc add.c -fPIC -shared -o libadd.so
gcc test.c -L. -ladd -o test
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./test
- 运行结果
- 使用动态链接库方式二使用dlopen
//test.c
#include<stdio.h>
#include<dlfcn.h>
#include<stdlib.h>
int main(void){
int (*add)(int, int);
void* handle = dlopen("./libadd.so",RTLD_LAZY);
if(!handle){
puts("dlopen error\n");
exit(0);
}
add = dlsym(handle, "add");
printf("1+2=%d\n",add(1, 2));
dlclose(handle);
return 0;
}
gcc add.c -fPIC -shared -o libadd.so
gcc test.c -o test -ldl
- 运行结果