C++ 中使用dlopen加载动态库

  1. 问题
    在C中加载动态库lib的时候,函数的名字没有改编,而在C++中,在编译的时候,函数的名字经过name mangling的改编。所以在C++中就有两个问题需要解决,一般函数的导出、类的导出。
  2. 一般函数的导出
    extern “C”
    有两种声明方式:
extern "C" int fun();// 针对导出函数比较少的:
#ifdef __cplusplus //针对导出函数比较多的情况
extern “C”
{
#endif
......
#ifdef __cplusplus
}
#endif 

3 类的导出
加载类有点困难,因为我们需要类的一个实例,而不仅仅是一个函数指针。我们无法通过new来创建类的实例,因为类不是在可执行文件中定义的,况且(有时候)我们连它的名字都不知道。
  解决方案是:利用多态性! 我们在可执行文件中定义一个带虚成员函数的接口基类ÿ

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值