【问题标题】:compiling against libstdc++.so.5 is not finding symbols @GLIBCPP_3.2针对 libstdc++.so.5 进行编译找不到符号@GLIBCPP_3.2
【发布时间】:2015-05-27 11:29:03
【问题描述】:

我正在构建一个使用需要 libstdc++.so.5 的第三方库的应用程序。直到最近我还在用 libstdc++.so.6 编译我的应用程序,它运行良好,但是它有一些可移植性问题。

因此,我决定安装 g++ 3.3.4 版,以便能够使用 libstdc++.so.5 编译我的应用程序。但是现在我根本无法编译我的应用程序。无论是使用我的旧 g++ 还是使用它的 3.3.4 版本...构建应用程序都会报告以下错误消息:

/opt/ExPansion/lib/libexpansion.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >::basic_istream(std::basic_streambuf<char, std::char_traits<char> >*)@GLIBCPP_3.2'

编辑: 以下命令的输出可能也很有趣:

$ strings /usr/lib/libstdc++.so.5 | grep 'LIB'    
GLIBCPP_3.2
GLIBCPP_3.2.1
GLIBCPP_3.2.2
GLIBCPP_3.2.3
GLIBCPP_3.2.4
GLIBC_2.0
GLIBC_2.3
GLIBC_2.1.3
GLIBC_2.1
GLIBC_2.2
GLIBCPP_FORCE_NEW

唯一让我好奇的是:

$ nm /usr/lib/libstdc++.so.5
nm: /usr/lib/libstdc++.so.5: no symbols

这是“正常的”吗?我的库是否可能不包含所需的符号?我通过以下方式下载了这个库:

yum install compat-libstdc++-33

..所以它不应该引起任何问题..

据我了解,@GLIBCPP_3.2 由我的 libstdc++.so.5 提供。那么这里可能出了什么问题呢?

【问题讨论】:

  • 也许这个库需要更新版本的 libstdc++。看看该版本是否在此处列出:“find / -name "libstdc++.so.5" 2> /dev/null -exec strings {} \; | grep 'GLIBCPP".
  • 您好,您的命令输出与以下输出相同: $ strings /usr/local/lib/libstdc++.so.5 | grep 'LIB' 我用这个命令的输出更新了我的问题。这对我们意味着什么?我需要更新版本的 libstdc++.so.5 库吗?
  • 我猜是这样,或者是旧版本的扩展库或扩展库用旧的 gcc 和旧的 c++ 库重新编译。
  • 嗯.. 得到了包含 GLIBCPP_3.2 字符串的 libstdc++.so.5.0.7(我有 5.0.6).. 问题仍然存在..
  • 它是否指向正确的库?试试“ldd -v libextension.so”

标签: c++ c gcc g++ libstdc++


【解决方案1】:

我不知道是什么原因导致我的链接器无法自行找到库... 但是,以下问题帮助我找到了解决问题的“解决方法”:how to force linker to use shared library instead of static library?

只需强制我的链接器链接到库就可以帮助..

gcc -o app app.o {other libs} /usr/lib/libstdc++.so.5

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 2021-10-25
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多