当前位置: 首页 > 面试题库 >

GLIBCXX版本

花博厚
2023-03-14
问题内容

如果在我的计算机上编译一个C ++程序,然后在另一个程序(使用旧版软件)上运行它,则会得到:/usr/lib/libstdc++.so.6: versionGLIBCXX_3.4.9’ not found`。

实际上,在我的系统上,glibc是较新的版本(我有gcc-libs 4.5.1:libstdc 。so.6.0.14),并 strings /usr/lib/libstdc++.so.6 | grep GLIBCXX从打印 GLIBCXX_3.4GLIBCXX_3.4.14。相反,在另一个系统上,它只能打印到 GLIBCXX_3.4.8(我得到libstdc

。so.6.0.8)。

所以我有几个问题:

  1. 为什么我的链接器将C 二进制文件链接到libstdc 版本GLIBCXX_3.4.9而不是链接GLIBCXX_3.4.14

  2. 如果我按照libstdc ++版本编译了二进制文件,GLIBCXX_3.4我猜它几乎可以在任何地方运行。这是否意味着任何问题?(例如:是否会使用较旧的算法,从而使用更差的算法?)

  3. 相反,如果我将html" target="_blank">程序 静态 链接到我的libstdc ++,我想它会在任何地方运行;当然,二进制文件会更大(〜1MB),还有其他优点/缺点吗?

  4. 我可以强制链接器将二进制文件链接到给定版本的libstdc ++吗?


问题答案:

优先使用readelf -aobjdump -x检查ELF文件strings

实际上,所有GLIBCXX_ *版本都不适用于整个库,而是适用于每个符号(符号版本,请参阅DSO-
howto
)。因此,您可以在同一个库文件上包含eg:std::char_traits<wchar_t>::eq@@GLIBCXX_3.4.5std::ios_base::Init::~Init()@@GLIBCXX_3.4

您的程序需要GLIBCXX_3.4.9的事实可能意味着它已与已引入的符号链接,或已在GLIBCXX_3.4.9上更改了语义。



 类似资料:
  • 一个好的 API 设计应该是“版本化”的:变更和新的功能应该在 API 新版本中实现,而不是在一个版本上持续更改。与Web应用程序不同,您可以完全控制客户端和服务器端 代码,APIs 是为了给超出控制的客户端使用。因此, 应该尽可能的保持向后兼容性,如果有一些变化不能向后兼容,你应该在新版本的 API 中采用它同时增加版本号。现有客户端可以继续使用旧版本的 API;新的或升级的客户端可以在新的 A

  • 在 Linxu 系统中,Emacs 的最新版本通常为 emacs-snapshot、emacs-cvs Emacs for Windows 请到这里下载,推荐“patched”版本

  • 在 Windows 平台下,请使用 gvim7ole 版本

  • 2021-06-04 Yearning v2.3.3 优化审核引擎 优化我的工单及审核搜索条件 优化工单详情页信息 优化回滚弹出框UI 修复重新登录密码错误或选择失败后返回登陆页面登录403的问题 流程页面新增搜索功能 修复公告栏admin无法编辑的问题 优化错误拦截逻辑,不重复显示相同错误信息 升级前端库 2021-03-01 Yearning v2.3.2 提升稳定性 优化整体性能,使用更流畅

  • 版本问题,ant design vue1.7.8版本能用less4版本吗? 目前项目为less3版本,按需求升级到less4,报错的内容是ant design vue相关的