【发布时间】: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”