【问题标题】:Unable to link to shared library无法链接到共享库
【发布时间】:2008-09-26 20:58:10
【问题描述】:

我正在使用 g++ 3.3.4 构建一个共享库。我无法链接到图书馆,因为我正在获取

./BcdFile.RHEL70.so: undefined symbol: _ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE13insert_uniqueERKj

c++filt 描述为

std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::insert_unique(unsigned int const&)

我认为这可能来自使用 hash_map,但我已将其全部拿出并切换到常规 std::map。我正在使用 g++ 进行链接,其中包括-lstdc++

有谁知道哪个类会实例化这个模板?或者更好的是,我需要链接到哪个库?

编辑:经过进一步审查,似乎在编译时添加了 -frepo 标志导致此问题,不幸的是,该标志正在解决 gcc3.3 错误。

【问题讨论】:

  • 那么,你有想过吗?

标签: c++ stl map linker shared-libraries


【解决方案1】:

std::_Rb_Tree 可能是一棵红黑树,很可能来自使用map。它应该是libstdc++ 的一部分,除非您的库链接到的libstdc++ 版本与应用程序不同,从您目前所说的来看,这似乎不太可能。

编辑:澄清一下,红黑树是map 中的底层数据结构。 hash_map 所做的只是在使用密钥之前对其进行哈希处理,而不是使用原始值。

【讨论】:

    【解决方案2】:

    试试

    #include &lt; map &gt; 
    在您使用地图的源文件中。

    【讨论】:

    • 缺少#include 会导致编译时错误,而不是链接时错误。
    • 我曾经遇到过非常相似的错误。添加#include ,即使它是另一个包含的一部分,也修复了它。我一直不明白那是什么。一定是 std::map 实例化的问题。一般来说,你是对的。但是使用模板,您可能会遇到各种奇怪的错误。
    • 反弹了。确实可能是问题所在,因为 通常包含其他标题。 std::map 很可能在与 共享的基本标头中声明,然后在 中定义。所以,如果你只包含 ,你只会得到 std::map 声明。 (可能 - 取决于编译器)
    【解决方案3】:

    你似乎有两个不同版本的 libstdc++.so 来自不同版本的 gcc。检查你的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2022-06-25
      相关资源
      最近更新 更多