首页 文章

使用GCC 3.4.6(libstdc .so.6.0.13)生成的gmock库链接给出了“未定义的引用... @ GLIBCXX_3.4.9”错误

提问于
浏览
0

链接在Linux机器上生成的gmock(1.4 svn281)库"A",使用 libstdc++.so.6.0.13 使用GCC 3.4.6给出了以下链接错误:

libgmock.so:对`std :: basic_ostream>&std :: __ ostream_insert>的未定义引用(std :: basic_ostream>&,char const *,long) @GLIBCXX_3.4.9 '...

我也尝试了最新的gmock发行版本,并且还得到了未定义的引用... @ GLIBCXX_3.4.9错误(这次使用其他符号) .

使用相同的构建过程构建gmock,但是在另一台机器"B"(现在退役的机器,但之前用于生成旧的二进制文件)我能够成功链接 . 该机器使用GCC 3.4.6,具有不同的libstdc版本: libstdc++.so.6.0.3 .

对GLIBCXX_3.4.9的libstdc .so.6.0.13进行了润滑,表明它包含这样的符号模式:_ZNSt13basic_ostreamIwSt1 @@ GLIBCXX_3.4.9(引用GLIBCXX_3.4.9,因此出错) . 我验证了libstdc .so.6.0.3不是这种情况

  • 为了理解链接错误以及我的选择,我阅读了libstdc和glibcxx以获得一些观点,但无法总结libs之间的关系:libstdc是否需要glibcxx或是否是另一种方式(错误消息使得似乎问题是:在glibcxx中有一个未定义的引用libstdc中的符号)?

  • libstdc是否隐式链接到glibcxx(知道libstdc一次可以引用多个glibcxx版本)?

  • 每当我想要更新lib时,我都不想回到旧机器来构建gmock,我是否限制使用特定的libstdc版本构建gmock?

感谢您对此问题的任何帮助

编辑:

我在机器“A”上构建了gmock库,并指定了libstdc:libstdc .so.6.0.3的版本并得到了与之前相同的错误,但这次没有在符号末尾附加@GLIBCXX_3.4.9:

libgmock.so:对`std :: basic_ostream>&std :: __ ostream_insert>的未定义引用(std :: basic_ostream>&,char const *,long)'...

我还通过启动命令:“readelf -a libgmock.so”并验证GLIBCXX_3.4.9未被引用来验证libstdc .so.6.0.3实际已被采用 .

1 回答

  • 0

    为了理解链接错误以及我的选择,我阅读了libstdc和glibcxx以获得一些观点,但无法得出libs之间的关系:libstdc是否需要glibcxx

    没有 glibcxx 库这样的东西 . libstdc++.so 使用GNU符号版本控制,并使用 GLIBCXX 符号前缀 . 整个 GLIBCXXlibstdc++ 本身的实现细节 .

    您的实际问题和可能的解决方案将被解释为here .

    实际上,您不能指望在较新的Linux系统上链接的二进制文件可以在较旧的系统上运行 .

相关问题