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

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动态链接库实现一个插件例子相关推荐

  1. linux 下c插件开发,Linux C编程:打造一个插件系统

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 运行环境:linux 使用语言:c 或者c++ 插件,很多人用过,比如游戏插件,编辑器插件这些, 最著名的就数魔兽大脚插 ...

  2. html5 websocket插件,html5实现的WebSocket一个小例子(附代码)

    本篇文章给大家带来的内容是关于html5实现的WebSocket一个小例子(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 客户端代码: var socket; if (&q ...

  3. Linux 关于动态链接库以及静态链接库的一些概念

    From http://os.rdxx.com/Linux/LinuxRudiment/2008/5/17017197011.shtml 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. ...

  4. 《LINUX下动态链接库的创建与应用》

    大家都知道,在windows系统中有很多的动态链接库(以.dll为后缀的文档,dll即dynamic link library).这种动态链接库,和静态函数库不同,他里面的函数并不是执行程式本身的一部 ...

  5. linux 下动态链接库的创建与使用——dlopen,dlsym

     一.引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(exec ...

  6. linux下C++ 插件(plugin)实现技术

    2019独角兽企业重金招聘Python工程师标准>>> linux下C++ 插件(plugin)实现技术 作者:掌门狗 时间:2008-12-01 20:21 分类:默认分类 标签: ...

  7. [转]Linux下pppoe配合Drcom插件上网方法介绍......

    Linux下pppoe配合Drcom插件上网方法介绍 近几天在西邮bbs上闲逛,无意间注意到很多人纠结于同一个问题---linux上网,众所周知,linux系统在宿舍上网时比较烦人的一件事,虽然bbs ...

  8. linux path环境变量检索目录,Linux下动态链接库加载路径及搜索路径问题

    引子 近日,服务器迁移后,偷懒未重新编译nginx的,直接./nginx启动,结果遇到如下问题: "error while loading shared libraries" 这是 ...

  9. linux命令之tee,技术|为初学者介绍的 Linux tee 命令(6 个例子)

    有时候,你会想手动跟踪命令的输出内容,同时又想将输出的内容写入文件,确保之后可以用来参考.如果你想寻找这相关的工具,那么恭喜你,Linux 已经有了一个叫做 tee 的命令可以帮助你. 本教程中,我们 ...

最新文章

  1. SpringBoot中使用rabbitmq
  2. win10 看不到其它计算机,w10网上邻居搜索不到其它电脑怎么办
  3. Mongodb 请求处理流程
  4. python numpy指定列最大值,统计次数
  5. 【技术系列】浅谈GPU虚拟化技术(第一章)
  6. 美国防部DARPA发起地下空间挑战赛提供3百万美元巨奖
  7. Java之乘积最大子数组
  8. 谷歌开源 Python 代码漏洞查找工具 Atheris
  9. 网页header 的 meta使用
  10. android 可拖拽View的简单实现
  11. WINCE 中常见的问题收集
  12. MySQL——MySQL 图形化管理工具的介绍
  13. 关于使用硬改的路由器的各种经历
  14. NC - 网络编码的Java实现(1)-GF28基本运算
  15. ubuntu16.04无法调节屏幕亮度
  16. 合计函数(统计函数)
  17. centos 6.2 安装intel 显卡驱动
  18. 机器视觉(12)浅说机器视觉系统概述及其国内外的现状
  19. 模仿360安全卫士项目笔记8
  20. SMSS打开界面闪退的解决方案

热门文章

  1. NeurIPS 2019放榜:华人作者贡献42%,谷歌170篇屠榜;国内清华第一,腾讯领衔产业界...
  2. svn 413 Request Entity Too Large 错误
  3. [转]:xmake插件开发之色彩高亮显示
  4. linux查看内核版本、系统版本、系统位数(32or64)
  5. Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)...
  6. 介绍linux下Source Insight强大代码编辑器sublime_text_3
  7. web开发工程师出路
  8. 电脑运行慢的原因汇总
  9. 图像水平梯度和竖直梯度代码_20行代码发一篇NeurIPS:梯度共享已经不安全了
  10. 用 C 语言开发一门编程语言 — 交互式解释器