首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++标准库不是向后兼容的吗?

C++标准库不是向后兼容的吗?
EN

Stack Overflow用户
提问于 2010-03-16 01:48:43
回答 2查看 3K关注 0票数 1

我在一个64位的Linux系统上工作,试图构建一些依赖于第三方库的代码,我有这些库的二进制文件。在链接期间,我得到了一个库的未定义引用错误流,表明链接器无法解析对标准C++函数/类的引用,例如:

代码语言:javascript
复制
librxio.a(EphReader.o): In function `gpstk::EphReader::read_fic_data(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
EphReader.cpp:(.text+0x27c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'
EphReader.cpp:(.text+0x4e8): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'

我不是一个真正的C++程序员,但在我看来,它找不到标准库。通过进一步的研究,当我查看librxio对标准库的依赖时,我得到了以下结果:

代码语言:javascript
复制
$ ldd librxio.so.16.0
./librxio.so.16.0: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./librxio.so.16.0)
   libm.so.6 => /lib64/libm.so.6 (0x00002aaaaad45000)
   libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002aaaaafc8000)
   libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002aaaab2c8000)
   libc.so.6 => /lib64/libc.so.6 (0x00002aaaab4d7000)
   /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)

所以我看到的是,librxio (第三方库之一)至少需要标准库的3.4.9版本。但是我安装的版本是4.1.2:

代码语言:javascript
复制
$ rpm -qa | grep libstdc
compat-libstdc++-33-3.2.3-61.x86_64
libstdc++-devel-4.1.2-14.el5.i386
libstdc++-devel-4.1.2-14.el5.x86_64
libstdc++-4.1.2-14.el5.x86_64
libstdc++-4.1.2-14.el5.i386

这不应该起作用吗?共享对象主数是6,与v3.4.9相同。在这个级别上,这不应该是向后兼容的吗?似乎第三方库正在寻找比我安装的标准库更早的版本;但是共享库的主版号相同的版本之间不是有向后兼容性吗?再说一次,我不是一个真正的C++程序员;但我看不出有什么问题。

任何建议都非常感谢。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-03-16 01:53:11

C++运行时往往是特定于编译器的,而您正在寻找的库肯定是特定于编译器版本的。请记住,即使界面不变,内部结构也可能发生变化。

您需要获取使用与您拥有的相同编译器和库版本构建的库,或者安装适当的编译器/库版本。

票数 6
EN

Stack Overflow用户

发布于 2010-03-16 01:53:22

你从哪里弄到librxio.so.16.0的?我认为它是用GCC > 4.1编译的,所以它可能不能在4.1运行时运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2449246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档