博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux C动态链接库实现一个插件例子
阅读量:6633 次
发布时间:2019-06-25

本文共 1479 字,大约阅读时间需要 4 分钟。

实现一个简单的计算动态链接库;升级动态链接库后,在不重新编译主程序的情况下,直接生效。

lib库:

#cat math.c#include 
int add(int x, int y){ return (x + y);}int sub(int x, int y){ return (x - y);}int mul(int x, int y){ return (x * y);}int div(int x, int y){ return (x/y);}

生成动态链接库

#gcc -shared -fPIC -o libmath.so math.c

主程序:

#cat main.c#include 
#include
#include
typedef int (*cac_func)(int, int);int main(void){ void *handle; char *error; cac_func fp=NULL; handle = dlopen("./libmath.so", RTLD_LAZY); if (!handle) { fprintf(stderr, "%s\n", dlerror()); exit(EXIT_FAILURE); } dlerror(); fp = dlsym(handle, "add"); if ((error = dlerror()) != NULL) { fprintf(stderr, "%s\n", error); exit(EXIT_FAILURE); } printf("add:%d\n", fp(1,1)); return 0;}
#gcc -o main.out main.c/tmp/ccTdLhjj.o: In function `main':main.c:(.text+0x1b): undefined reference to `dlopen'main.c:(.text+0x2b): undefined reference to `dlerror'main.c:(.text+0x56): undefined reference to `dlerror'main.c:(.text+0x67): undefined reference to `dlsym'main.c:(.text+0x70): undefined reference to `dlerror'collect2: error: ld returned 1 exit status

需要使用 指定使用动态链接库: dl

#gcc -o main.out -ldl main.c

运行:

#./main.outadd:2

修改库:

#cat  math.c#include 
int add(int x, int y){ return (x + y + 100);}

重新编译库:

#gcc -shared -fPIC -o libmath.so math.c

运行:

#./main.outadd:102

转载于:https://www.cnblogs.com/muahao/p/10376344.html

你可能感兴趣的文章
javascript面向对象的一些写法
查看>>
图片存储那些事
查看>>
lua中常量的实现及表的深拷贝实现
查看>>
Transformer中引用iqd作为数据源的时候数据预览出现乱码
查看>>
UML--核心元素之业务实体
查看>>
使用JAVA的URL类处理url事例
查看>>
C链表
查看>>
安装C/C++交叉编译环境
查看>>
Extjs4.x 共享组件,写法
查看>>
一段测试try...catch运行时间的代码
查看>>
C++读写文件流的相关介绍
查看>>
sql, plsql 总结
查看>>
JavaScript类型转换
查看>>
《大学数学遐想》系列之积分
查看>>
运行top时,会报unknown terminal type错误
查看>>
WPF DataGrid 增加"更新"模板列,根据行Row的选择而显示"更新"按钮
查看>>
Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果
查看>>
web测试方法总结
查看>>
[原]发布一个jQuery提示框插件,Github开源附主站,jquery.tooltips.js
查看>>
算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing
查看>>