根据libstdc++.so.5编译时找不到符号@GLIBCPP_3.2

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

本文关键字:@GLIBCPP 符号 找不到 libstdc++ so 编译 根据      更新时间:2023-10-16

我正在构建一个使用第三方库的应用程序,该库需要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。。。然而,以下问题帮助我找到了解决问题的"变通方法":如何强制链接器使用共享库而不是静态库?

简单地强迫我的链接器链接到库就有帮助。。

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