dlopen动态库后dynamic_cast的问题

在使用GCC编译动态库时,动态库间的依赖管理和符号可见性是关键。动态库d1依赖d2,只需包含d2的头文件目录。而执行体需包含所有库及头文件目录,并用'-ldl'和可能的'-rdynamic'参数。针对dlopen加载库后的dynamic_cast问题,GCC3.0后机制改变,导致转换失败。解决方法是在链接时添加'-Wl,-E'选项,并在dlopen时使用RTLD_GLOBAL,使执行体符号全局化。" 125500075,7889824,使用EasyExcel处理Java数据导入,"['Java开发', '数据处理', '导入导出', 'EasyExcel框架']
摘要由CSDN通过智能技术生成
编译动态库需要加上“-shared”选项。编译动态库d1.so时,如果用到了动态库d2.so的内容,只需要将d2.so的头文件目录(-I)加进去即可,不需要具体的实现代码,这样基本上实现了d1和d2的独立化。

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

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

对于dlopen打开的动态库用到多态,在GCC(g++) 3.0版本以后,对于该方法的实现机制不一样了,所以在用dynamic_cast类型转换会有问题。在编译执行体时加入"-Wl,-E"选项,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值