c++ | 动态链接库 | 小结

文章讲述了如何在Linux环境下创建C++动态链接库,并使用dlopen和dlclose函数进行加载和释放。通过示例展示了externC的使用来避免函数重载问题,以及使用nm命令查找库中函数符号。同时提到了在调用动态链接库的函数时可能出现的错误和解决方法。
//环境 linux c++
//生成动态链接库
//然后调用动态链接库中的函数

//出现的问题以及解决

//注意在win和在linux中调用动态链接库的函数是不一样的

//在要生成链接库的cpp文件中比如以后要调用本文件中的某个函数,需要extern "c" 把你定的函数“再封装”避免重载出现的一些问题

//举个实例吧
extern "c" void sum(int x, double y);

void sum(int x, double y){
	std::cout<<(int) x + y<<std::endl;
}

#生成动态链接库libxxx.so 注意哈 在链接的时候,g++ 会把链接为libxxx.so--> lxxx		不好描述
g++ -fPIC -shared xxx.cpp -o libxxx.so
#include <dlfcn.h>

typedef bool (*Function)(int, double);
Function exFunction = NULL;


//类似初始化
 void* libHandle = dlopen("./lxxx.so", RTLD_LAZY);

//这里还要做判断,是否初始化成功

exFunction = (Function )(dlsym(libHandle, "sum"));

//调用链接库中的函数
exFunction (4, 5.5);

//释放资源
dlclose(libHandle);
#当重载多个函数,可能自己弄晕了,可以用下面的命令去找生成动态链接库后你的那个sum函数的函数符是什么,也就是说
#exFunction = (Function )(dlsym(libHandle, "sum"));中的sum 就是下面命令的输出结果
nm -D libext_curl.so | grep sum

参照如下
在这里插入图片描述
在这里插入图片描述
像第一个结果,如果我填入的是dlsym(libHandle, “GET”)会报错
如果这样写dlsym(libHandle, “Z3GETRSsS”)执行成功

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值