针对 libstdc++.so.5 进行编译未找到符号 @GLIBCPP_3.2

compiling against libstdc++.so.5 is not finding symbols @GLIBCPP_3.2

我正在构建一个使用需要 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

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

yum install compat-libstdc++-33

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

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

我不知道是什么原因导致我的 linker 找不到自己的库... 以下问题帮助我找到了 "workaround" 我的问题:how to force linker to use shared library instead of static library?

仅仅强迫我的 link 儿 link 反对图书馆帮助..

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