dlopen动态库后dynamic_cast的问题

编译动态库需要加上“-shared”选项。编译动态库d1.so时,如果用到了动态库d2.so的内容,只需要将d2.so的头文件目录(-I)加进去即可,不需要具体的实现代码,这样基本上实现了d1和d2的独立化。

在编译可执行体时,必须将所有的库(-L和-l)都加进来,并且相关的头文件目录(-I)也得加进来,此外还得加入“-ldl”参数。

如果库之间有依赖关系,还得加入“-rdynamic”参数,该参数将所有的符号都加入到动态符号表里,这样被包含的库可以用到包含的库的符号。

对于dlopen打开的动态库用到多态,在GCC(g++) 3.0版本以后,对于该方法的实现机制不一样了,所以在用dynamic_cast类型转换会有问题。在编译执行体时加入"-Wl,-E"选项,注意逗号 ,并且在dlopen参数中加入RTLD_GLOBAL,这样就将执行体的中符号变为全局符号了,dlopen打开的动态库也就可以用执行体中的符号了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值