Linux中dlfcn库相关学习.md
Linux中dlfcn库相关学习
在linux中静态链接库和动态链接库是进程之间代码共享的两种方式。Linux在
dlfcn库中函数说明
dlfcn库中主要包括四个函数:123456789void* dlopen(const char*, int flag);char* dlerror();void* dlsym(void* handler, char* symbol);int dlclose(void* handler);
- dlopen : 打开一个动态连接库,并返回一个类型为void*的handler,flag为打开模式,可选的模式有两种
- RTLD_LAZY 暂缓决定,等有需要时再解出符号
- RTLD_NOW 立即决定,返回前解除所有未决定的符号。
- dlerror : 返回dl操作的错误,若没有出现错误,则返回NUlL,否则打印错误信息
- dlsym : 查找动态链接库中的符号symbol,并返回该符号所在的地址
- dlclose : 关闭动态链接库句柄
使用实例
动态链接库cal.cpp123456789101112131415161718//cal.cppextern "C" {int add(int a, int b) { return a + b;}int sub(int a, int b) { return a - b;}int mul(int a, int b) { return a * b;}int div(int a, int b) { return a / b;}}
生成动态链接库libcal.so1g++ -shared -fPIC cal.cpp libcal.so
|
|
编译函数main:1g++ main.cpp -rdynamic -ldl
执行结果:1234add:3sub:-1mul:2div:0
注意问题
特别注意,若使用c++编译动态链接库,一定要在需要使用的符号处添加extern “C”,否则会出现符号找不到的问题。即undefined symbol