You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

引入Boost C++头文件导致dlopen()返回_ZTVN10__cxxabiv117__class_type_infoE错误

_ZTVN10__cxxabiv117__class_type_infoE是C++ ABI中类类型信息的虚表符号,该缺失问题和Boost编译选项无关,是编译链适配与链接依赖不全导致的,具体说明如下:

核心原因

  • 编译/链接工具链不匹配
    你的HelloWorld.so核心源文件是C语言实现,默认会调用gcc作为编译器/链接器;而依赖的myatomic是C实现的库,使用g编译。gcc链接C生成的产物时,默认不会引入完整的C++运行时依赖,你仅添加-lstdc++仅覆盖了标准库部分,缺少了RTTI、异常处理相关的libsupc++依赖,就会出现该符号缺失。
  • Boost头文件引入额外依赖
    boost/system/error_code.hpp内部实现用到了C类继承、RTTI特性,编译myatomic时会生成对上述cxxabi符号的依赖;注释该头文件后myatomic不再用到相关C特性,没有对应符号依赖,因此dlopen可以正常执行。

修复方案

  • 优先将HelloWorld.so的链接器从gcc替换为g++,g会自动补齐所有需要的C运行时依赖,无需手动配置-lstdc++等选项,兼容性最高
  • 如果必须使用gcc作为链接器,在现有链接选项基础上追加-lsupc++,补齐RTTI相关的运行时库依赖
  • 额外校验Conan源中的myatomic库编译使用的gcc版本,和当前HelloWorld的编译gcc版本保持大版本一致,跨大版本gcc编译的C++库混合链接也会触发符号缺失问题

内容的提问来源于stack exchange,提问作者vengy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:54:01