我正在构建一个使用第三方库的应用程序,该库需要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
那是“正常”吗?我的lib可能没有包含所需的符号吗?我通过以下方式下载了这个lib:
yum install compat-libstdc++-33
..所以它不应该造成任何问题..
根据我的理解,@ GLIBCPP_3.2由我的libstdc ++。so.5提供。那么这里可能出现什么问题?
答案 0 :(得分:1)
我不知道是什么原因导致我的链接器自己找不到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