Linux C动态链接库实现一个插件例子
实现一个简单的计算动态链接库;升级动态链接库后,在不重新编译主程序的情况下,直接生效。
lib库:
#cat math.c
#include <stdio.h>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 <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>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.out
add:2
修改库:
#cat math.c
#include <stdio.h>int add(int x, int y)
{return (x + y + 100);
}
重新编译库:
#gcc -shared -fPIC -o libmath.so math.c
运行:
#./main.out
add:102
转载于:https://www.cnblogs.com/muahao/p/10376344.html
Linux C动态链接库实现一个插件例子相关推荐
- linux 下c插件开发,Linux C编程:打造一个插件系统
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 运行环境:linux 使用语言:c 或者c++ 插件,很多人用过,比如游戏插件,编辑器插件这些, 最著名的就数魔兽大脚插 ...
- html5 websocket插件,html5实现的WebSocket一个小例子(附代码)
本篇文章给大家带来的内容是关于html5实现的WebSocket一个小例子(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 客户端代码: var socket; if (&q ...
- Linux 关于动态链接库以及静态链接库的一些概念
From http://os.rdxx.com/Linux/LinuxRudiment/2008/5/17017197011.shtml 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. ...
- 《LINUX下动态链接库的创建与应用》
大家都知道,在windows系统中有很多的动态链接库(以.dll为后缀的文档,dll即dynamic link library).这种动态链接库,和静态函数库不同,他里面的函数并不是执行程式本身的一部 ...
- linux 下动态链接库的创建与使用——dlopen,dlsym
一.引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(exec ...
- linux下C++ 插件(plugin)实现技术
2019独角兽企业重金招聘Python工程师标准>>> linux下C++ 插件(plugin)实现技术 作者:掌门狗 时间:2008-12-01 20:21 分类:默认分类 标签: ...
- [转]Linux下pppoe配合Drcom插件上网方法介绍......
Linux下pppoe配合Drcom插件上网方法介绍 近几天在西邮bbs上闲逛,无意间注意到很多人纠结于同一个问题---linux上网,众所周知,linux系统在宿舍上网时比较烦人的一件事,虽然bbs ...
- linux path环境变量检索目录,Linux下动态链接库加载路径及搜索路径问题
引子 近日,服务器迁移后,偷懒未重新编译nginx的,直接./nginx启动,结果遇到如下问题: "error while loading shared libraries" 这是 ...
- linux命令之tee,技术|为初学者介绍的 Linux tee 命令(6 个例子)
有时候,你会想手动跟踪命令的输出内容,同时又想将输出的内容写入文件,确保之后可以用来参考.如果你想寻找这相关的工具,那么恭喜你,Linux 已经有了一个叫做 tee 的命令可以帮助你. 本教程中,我们 ...
最新文章
- SpringBoot中使用rabbitmq
- win10 看不到其它计算机,w10网上邻居搜索不到其它电脑怎么办
- Mongodb 请求处理流程
- python numpy指定列最大值,统计次数
- 【技术系列】浅谈GPU虚拟化技术(第一章)
- 美国防部DARPA发起地下空间挑战赛提供3百万美元巨奖
- Java之乘积最大子数组
- 谷歌开源 Python 代码漏洞查找工具 Atheris
- 网页header 的 meta使用
- android 可拖拽View的简单实现
- WINCE 中常见的问题收集
- MySQL——MySQL 图形化管理工具的介绍
- 关于使用硬改的路由器的各种经历
- NC - 网络编码的Java实现(1)-GF28基本运算
- ubuntu16.04无法调节屏幕亮度
- 合计函数(统计函数)
- centos 6.2 安装intel 显卡驱动
- 机器视觉(12)浅说机器视觉系统概述及其国内外的现状
- 模仿360安全卫士项目笔记8
- SMSS打开界面闪退的解决方案
热门文章
- NeurIPS 2019放榜:华人作者贡献42%,谷歌170篇屠榜;国内清华第一,腾讯领衔产业界...
- svn 413 Request Entity Too Large 错误
- [转]:xmake插件开发之色彩高亮显示
- linux查看内核版本、系统版本、系统位数(32or64)
- Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)...
- 介绍linux下Source Insight强大代码编辑器sublime_text_3
- web开发工程师出路
- 电脑运行慢的原因汇总
- 图像水平梯度和竖直梯度代码_20行代码发一篇NeurIPS:梯度共享已经不安全了
- 用 C 语言开发一门编程语言 — 交互式解释器