gcc dynamic load library
Linux下一般都是直接在编译生成时挂接上链接库,运行时,把链接库放到系统环境里就可以了
但是windows出现带来了动态链接的概念,也就兴起了非windows世界的插件的概念的范潮
对应于windows下的
LoadLibrary
GetProcAddress
FreeLibrary
Linux提出了
dlopen
dlsym
dlclose
的相关系统调用
哎,全是抄啊!!!!
一把泪
好了,我想你应该明白怎么回事了吧
下面,带你进入linux动态加载库的世界
这个是由libdl库来运作的噢!!!
//caculate.c
int add(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int mul(int a, int b)
{
return a*b;
}
int div(int a, int b)
{
return a/b;
}
//main.c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#define LIB_CACULATE_PATH "./libcaculate.so"
typedef int(*CAC_FUNC)(int, int);
int main()
{
void *handle = NULL;
char *error = 0;
CAC_FUNC cac_func = NULL;
handle = dlopen(LIB_CACULATE_PATH, RTLD_LAZY);
//handle = dlopen(LIB_CACULATE_PATH, RTLD_NOW);
if (!handle)
{
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
dlerror();
cac_func = (CAC_FUNC)dlsym(handle, "add");
if (cac_func)
{
printf("add: %d\n", cac_func(2, 7));
}
cac_func = (CAC_FUNC)dlsym(handle, "sub");
if (cac_func)
{
printf("sub: %d\n", cac_func(9, 2));
}
cac_func = (CAC_FUNC)dlsym(handle, "mul");
if (cac_func)
{
printf("mul: %d\n", cac_func(3, 2));
}
cac_func = (CAC_FUNC)dlsym(handle, "div");
if (cac_func)
{
printf("div: %d\n", cac_func(8, 2));
}
dlclose(handle);
return 0;
}
//生成库和调用者
gcc -o caculate.o -c caculate.c
gcc -fPIC -shared -o libcaculate.so caculate.o
gcc -o main.o -c main.c
gcc -o main -ldl main.o
//运行与结果
我们的调用者main将要调用libcaculate.so动态库
./main
add: 10
sub: 12
mul: 24
div: 2
Finally:
看这个世界哪里都一样啊!
好了,大家去搞插件去吧!!!
对了,忘了告诉你了,插件已经早就不流行了,哈哈哈
但我觉得历史是不应该被忘记的,记住这个阶段,对于你应该有重大意义的啊
现在,我们的这个世界流行的是Web,“一切皆服务,一切皆应用”
gcc dynamic load library的更多相关文章
- Linux Dynamic Shared Library && LD Linker
目录 . 动态链接的意义 . 地址无关代码: PIC . 延迟版定(PLT Procedure Linkage Table) . 动态链接相关结构 . 动态链接的步骤和实现 . Linux动态链接器实 ...
- How to Use the Dynamic Link Library in C++ Linux (C++调用Delphi写的.so文件)
The Dynamic Link Library (DLL) is stored separately from the target application and shared among dif ...
- DYNAMIC LINK LIBRARY - DLL
https://www.tenouk.com/ModuleBB.html MODULE BB DYNAMIC LINK LIBRARY - DLL Part 1: STORY What do we h ...
- Unreal: Dynamic load map from Pak file
Unreal: Dynamic load map from Pak file 目标:在程序运行时加载自定义 Pak 文件,并打开指定关卡,显示其中的完整 map 内容 Unreal 的 Pak 文件内 ...
- Walkthrough: Create and use your own Dynamic Link Library (C++)
参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...
- java.lang.UnsatisfiedLinkError: Unable to load library 'xxx': Native library (win32-x86-64/ID_Fpr.dll)
使用 JNA 调用 dll 库,因为 dll 库是32 位的,而 jvm 是 64位的,所以发生的错误: java.lang.UnsatisfiedLinkError: Unable to load ...
- xvfb启动PyQt4程序报Unable to load library icui18n错误
xvfb启动PyQt4程序报如下错误: Unable to load library icui18n "Cannot load library icui18n: (libicui18n.so ...
- Walkthrough: Creating and Using a Dynamic Link Library (C++)
Original Link: http://msdn.microsoft.com/zh-cn/library/ms235636.aspx Following content is only used ...
- Custom Action : dynamic link library
工具:VS2010, Installshield 2008 实现功能: 创建一个C++ win32 DLL的工程,MSI 工程需要调用这个DLL,并将Basic MSI工程中的两个参数,传递给DLL, ...
随机推荐
- N!
求N! Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N ...
- Django:视图views(三)
写一下Cookie.重定向.Session Cookie 测试代码,承接前面的代码: 路由: booktest/urls.py urlpatterns = [ url('^$',views.index ...
- weakSelf 运用 strongSelf来解决block的循环引用
SDWebImage 中有一段源码: #if SD_UIKIT Class UIApplicationClass = NSClassFromString(@"UIApplication&qu ...
- 解决pathForResource返回nil, 无法读取plist文件问题
有很多人在设置plist文件的时候, 会发现读取不了plist文件里面的内容, 返回值为nil, 下面我们来解决一下这个问题. 首先我们打开工程并且按照下面的步骤来设置: 设置好后, 我们来写一段代码 ...
- SR锁存器
CRM(临界连续模式)BOOST PFC 电路控制系统 SR锁存器 S和R都等于0的时候为什么有两个不同的Q?正因为这样才叫锁存器.Q’是Q的取反,不可能相同.Q*和Q‘不一样.Q是Q*的前一个状态. ...
- 转:CSS设置HTML元素的高度与宽度的各种情况总结
1.元素不设宽度第一种情况:元素为文档流中元素<!-- 父元素宽度为100px --><div style="width:100px;"> < ...
- Linux7安装Oracle 11g 86%报错:Error in invoking target 'agent nmhs' of makefile
解决方案在makefile中添加链接libnnz11库的参数修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将$(MK_EMAGENT_NMECTL)修改为:$(MK ...
- input="file" 浏览时只显示指定excel文件,筛选特定文件类型
<p>显示 .xls, .xlsx, .csv 文件...</p> <input type="file" accept=".csv, app ...
- java System类的一些静态方法
package cn.sasa.demo2; public class SystemDemo { public static void main(String[] args) { func_array ...
- Lua: 给 Redis 用户的入门指导(转)
add by zhj : Lua与Multi/EXEC的功能比较像,在执行过程中,redis不会执行其它命令,这就不会有并发访问的问题, 这是非常好的.但Multi/EXEC要求所有命令都是独立的,后 ...