与使用 GCC 3.4.6 (libstdc++.so.6.0.13) 生成的 gmock 库链接会产生"undefined reference to... @GLIBCXX_3.4.9"错误
Linking with gmock libs generated using GCC 3.4.6 (libstdc++.so.6.0.13) gives "undefined reference to... @GLIBCXX_3.4.9" errors
使用在Linux机器"a"上生成的gmock(1.4+svn281)库进行链接,GCC 3.4.6使用libstdc++.so.6.0.13会出现以下链接错误:
libgmock.so:对"std::basic_stream>&std::__ostream_insert>(std::basic_stream>&,char const*,long)@GLIBCXX_3.4.9'…
我也尝试了最新的gmock发布版本,还得到了对…@GLIBCXX_3.4.9错误的未定义引用(这次是其他符号)。
使用相同的构建过程构建gmock,但在另一台机器"B"(现在已经退役,但以前用于生成旧的二进制文件)上,我能够成功链接。该机器使用GCC 3.4.6,具有不同的libstdc++版本:libstdc++.so.6.0.3.
在libstdc++.so.6.0.13上对GLIBCXX_3.4.9进行Grepping显示它包含这样的符号模式:_ZNSt13basic_streamIwSt1@@GLIBCXX_3.4.9(参考GLIBCXX_3.4.9,因此出现错误)。我验证了libstdc++.so.6.0.3的情况并非如此
- 为了理解链接错误以及我的选择,我阅读了关于libstdc++和glibcxx的文章,以获得一些观点,但无法得出libs之间的关系:libstdcC++需要glibcxx吗?还是相反(错误消息让人觉得问题是:在glibcxx中,对libstdc+中的符号有一个未定义的引用)
- libstdc++是否隐式地与glibcxx链接(知道libstdc++可以一次引用多个glibcxx版本)
- 每当我想更新libs时,我不想回到旧机器上构建gmock,我是否被限制为使用特定的libstdc++版本来构建gmock
感谢有关问题的任何帮助
编辑:
我在机器"A"上构建了gmock-libs,并指定了libstdc++的版本:libstdc++.so.6.0.3,得到了与以前相同的错误,但这次没有在符号末尾添加@GLIBCXX_3.4.9:
libgmock.so:对"std::basic_stream>&std::__ostream_insert>(std::basic_stream>&,char const*,long)'…
我还通过启动命令"readelf-a libgmock.so"并验证GLIBCXX_3.4.9没有被引用,验证了libstdc++.so.6.0.3是否被实际使用。
为了理解链接错误以及我的选择,我阅读了libstdc++和glibcxx,以获得一些观点,但无法得出libs之间的关系:libstdcC++是否需要glibcxx
没有glibcxx
库这样的东西。libstdc++.so
使用GNU符号版本控制,并使用GLIBCXX
符号前缀。整个GLIBCXX
是libstdc++
本身的实现细节。
您的实际问题和可能的解决方案在这里进行了解释。
实际上,您不能期望在较新的Linux系统上链接的二进制文件在较旧的系统上工作。
- 为什么在使用 SDL2 时仍然收到'undefined reference'链接器错误?
- 为什么当我在 C 程序中链接静态库时会"undefined symbol"?
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- 为什么这"undefined extern variable"不会导致 C++17 中出现链接器错误?
- 带有 mingw-w64 的 SDL2 - 链接器找到 libSDL2.a,但抛出"undefined reference"错误
- 静态库链接 已定义符号的问题"Undefined symbols"
- 链接链接器/加载器错误时"undefined reference to ..."与拉斯皮康库链接时
- 链接升压库时出现的另一个"undefined reference"错误
- 链接器为某些上下文中使用的集成静态常量成员提供错误"undefined symbol"
- 链接Qt应用程序时出现数百个"undefined reference"错误
- 即使在链接后也能提高对系统的"Undefined Reference"
- 在 c++ 应用程序中使用 libgrib2c,链接器错误"Undefined reference to..."
- 使用模板时出现"undefined reference to"链接器错误
- 将静态 C 库与C++代码链接时出现"undefined reference to"错误
- 在cygwin中使用clang的神秘链接器错误"undefined reference to `__gxx_personality_v0'"
- 继承链接引发'undefined reference to...' C++
- 为什么在定义变量和链接库时"undefined reference"?
- 与使用 GCC 3.4.6 (libstdc++.so.6.0.13) 生成的 gmock 库链接会产生"undefined reference to... @GLIBCXX_3.4.9"错误
- 编译过程中关于 boost 静态库的链接错误"undefined reference"
- Linux gcc 4.3.4 上的链接错误:与"jpeg"库相关的"undefined reference"(例如,未定义对"jpeg_std_error(jpeg_error_mgr*)"的引用)