【问题标题】:Symbol names convention in libstdc++libstdc++ 中的符号名称约定
【发布时间】:2021-12-27 09:26:28
【问题描述】:

在构建库期间,我收到以下“未定义引用”错误:

libtbb.so.2: undefined reference to `__cxa_init_primary_exception@CXXABI_1.3.11'

当我检查 libstdc++ 库中的符号时,我看到了以下内容

nm -CD libstdc++.so.6.0.24 | grep "__cxa_init_primary_exception"
000000000008fdd8 T __cxa_init_primary_exception@@CXXABI_1.3.11

所以 libstdc++.so 中的符号名称与 libtbb.so 似乎需要的符号名称之间的唯一区别是符号名称中的附加“@”。如果我打字会更有趣

nm -C libtbb.so.2 | grep "__cxa_init_primary_exception"
                 U __cxa_init_primary_exception@@CXXABI_1.3.11

我看到 libtbb 需要一个实际上包含双 @ 的符号。这个命名约定背后的比例是多少?为什么链接器会搜索一个带有一个 @ 的符号名称?

【问题讨论】:

    标签: c++ symbols libstdc++


    【解决方案1】:

    可能与known issue有关?

    还提到了here

    ...当前 TBB 与 gcc-libs 存在问题,它是使用 gcc-libs 7.x 编译的,因此如果您尝试使用最新的 TBB 构建 OpenCV,则会出现此错误

    那里提出的解决方案:

    这也发布在这里,解决方法是您应该从 Arch Linux Archive 安装 TBB 2017_20170412-1。为此,请先安装最新的 TBB,然后再降级。

    【讨论】:

    • 谢谢,第二个链接确实有助于解决问题!我下载了旧版本的 libtbb (github.com/oneapi-src/oneTBB/tree/2020_U3) 并直接在我的目标机器上编译它——这样就使用了正确的 ABI 版本。
    猜你喜欢
    • 2013-10-09
    • 2014-06-06
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2011-05-26
    • 2020-11-09
    • 2011-02-12
    相关资源
    最近更新 更多