我正在构建一个使用需要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提供。那么,这里可能出什么问题了?
最佳答案
我不知道是什么原因导致我的链接器无法自行找到lib ...
以下问题帮助我找到了解决问题的“变通办法”:how to force linker to use shared library instead of static library?
仅仅强制我的链接器链接到库即可。
gcc -o app app.o {other libs} /usr/lib/libstdc++.so.5
关于c++ - 针对libstdc++。so.5编译未找到符号@ GLIBCPP_3.2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30481166/