linux c之动态打开链接库(dlopen dlsym dlclose)

举报
chenyu 发表于 2021/07/26 22:56:56 2021/07/26
【摘要】 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文件如下


  
  1. int add(int a, int b)
  2. {
  3. return a + b;
  4. }
  5. int sub(int a, int b)
  6. {
  7. return a - b;
  8. }

编译参数 gcc -fPIC -shared
编译命令

gcc -fPIC -shared add.c -o libadd.so
 

我们把生成的so拷贝到我们需要测试的test.c同一个目录下
test.c文件如下


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <dlfcn.h>
  4. # define PATH "./libadd.so"
  5. typedef int(*Fun)(int, int);
  6. int main()
  7. {
  8. void *handle;
  9. char *error;
  10. Fun fun

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/82468700

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。