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

时间:2015-05-27 11:29:04

标签: c++ c gcc g++ libstdc++

我正在构建一个使用第三方库的应用程序,该库需要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提供。那么这里可能出现什么问题?

1 个答案:

答案 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