linux c之动态打开链接库(dlopen dlsym dlclose)
【摘要】 1 linux提供了加载和处理动态链接库的系统调用
2 主要函数
1) dlopen、 dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,打开模式如下: RTLD_LAZY 暂缓决定,等有需要时再解出符号 RTLD_NOW 立即决定,返回前解除所有未决定的符号。 ...
1 linux提供了加载和处理动态链接库的系统调用
2 主要函数
1) dlopen、
dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,打开模式如下:
RTLD_LAZY 暂缓决定,等有需要时再解出符号
RTLD_NOW 立即决定,返回前解除所有未决定的符号。
2) dlsym、
dlsym通过句柄和连接符名称获取函数名或者变量名
3) dlclose
dlclose来卸载打开的库
4) dlerror
dlerror返回出现的错误
3 测试Demo
1)写一个add.c文件,然后编译成一个libadd.so,add.c文件如下
-
int add(int a, int b)
-
{
-
return a + b;
-
}
-
-
int sub(int a, int b)
-
{
-
return a - b;
-
}
编译参数 gcc -fPIC -shared
编译命令
gcc -fPIC -shared add.c -o libadd.so
我们把生成的so拷贝到我们需要测试的test.c同一个目录下
test.c文件如下
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <dlfcn.h>
-
-
# define PATH "./libadd.so"
-
-
typedef int(*Fun)(int, int);
-
-
int main()
-
{
-
void *handle;
-
char *error;
-
Fun fun
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/82468700
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)