使用libstdc++.so.6.0.13与Linux机器“A”上生成的gmock(1. 4 + svn 281)库链接时,GCC 3. 4. 6会产生以下链接错误:
libgmock.so。
我也尝试了最新的gmock发行版本,也得到了未定义的引用...@GLIBCXX_3.4.9错误(这次是用其他符号)。
使用相同的构建过程构建gmock,但是在另一台机器“B”(现在已经退役,但以前用于生成较旧的二进制文件)上,我能够成功链接。这台机器使用GCC 3.4.6,带有不同的libstdc版本:****************************************
对GLIBCXX_3.4.9的libstdc.so.6.0.13进行的Grepping显示,它包含这样的符号模式:_ZNSt13basic_ostreamIwSt1@@GLIBCXX_3.4.9(引用GLIBCXX_3.4.9,因此出现错误)。我验证了libstdc++.so.6.0.3的情况并非如此
- 为了理解链接错误以及我的选择,我阅读了libstdc和glibcxx,以获得一些观点,但无法得出库之间的关系:libstdc是否需要glibcxx,或者是否需要glibcxx(错误消息似乎表明问题是:在glibcxx中存在对libstdc++中的符号的未定义引用)?
- libstdc是否与glibcxx隐式链接(知道libstdc可以一次引用多个glibcxx版本)?
- 我不想在每次更新libs时都回到旧机器上构建gmock,我是否必须使用特定的libstdc++版本来构建gmock?
感谢您在此问题上提供的任何帮助
编辑:
我在机器“A”上构建了gmock库,并指定了libstdc的版本:libstdc.so.6.0.3,并得到与前面相同的错误,但这次没有在符号末尾附加@GLIBCXX_3.4.9:
libgmock.so。
我还验证了libstdc++.so.6.0.3实际上已被占用,方法是启动以下命令:“readelf -a libgmock.so“,并验证未引用GLIBCXX_3.4.9。
1条答案
按热度按时间nx7onnlm1#
为了理解链接错误以及我的选择,我阅读了libstdc和glibcxx,以获得一些观点,但无法得出库之间的关系:libstdc是否需要glibcxx
glibcxx
库是不存在的,libstdc++.so
使用的是GNU符号版本控制,使用的是GLIBCXX
符号前缀,整个GLIBCXX
就是libstdc++
本身的 * 实现细节 *。here解释了您的实际问题和可能的解决方案。
实际上,您不能期望在较新的Linux系统上链接的二进制文件在较旧的Linux系统上工作。