【问题标题】:About the binary compatibility of Linux关于 Linux 的二进制兼容性
【发布时间】:2013-12-27 11:42:02
【问题描述】:

如果我得到一些由 Ubuntu 上的 GCC 4.8 构建的 C++ 代码,该代码没有 GUI/界面,只能调用标准的 Linux 库,那么二进制文件可以在 RHEL 5/6 上运行,并且可以完美地使用更旧的 GCC ?

【问题讨论】:

  • 我不是 Unix 专家,但我认为如果您静态链接所有内容并且您的应用程序不使用特定于 ubuntu 的 API,它应该可以工作。知道的最好方法是尝试:)
  • 如果它是静态链接的,那么可能;如果它是动态链接的,那么可能不是。
  • 你最好在旧的 Ubuntu 上编译你的程序以获得更好的兼容性,因为大多数系统库、编译器和其他工具都试图向后兼容。

标签: c++ linux gcc binary-compatibility


【解决方案1】:

通常不能。它会抱怨 libc 太旧了。

如果您使用 libstdc++ 进行静态链接并小心避免使用较新的 glibc 功能,您也许可以摆脱它。后者并不总是可能的。与 libc 的静态链接不受官方支持,可能对您有效,也可能无效。

【讨论】:

  • 实际上可能只是用 GCC 4.8 重建旧版本的 libc,运行 patchelf (nixos.org/patchelf.html),一切都可能正常。
  • @skwllsp 从目标系统复制 libc 通常也可以。
  • 你确定吗?看看这个:stackoverflow.com/a/851229/184968?您的意思是复制所有内容,包括 ld-linux.so.2?
  • @skwllsp 我不保证它会工作,但我认为复制 /lib abd /usr/lib 可以工作。
【解决方案2】:

问题可能更多是Glibc 而不是libstdc++(您确实可以静态链接)或GCC 本身。

您可以使用其他 Libc,例如 MUSL libc(应该对静态链接更友好)

此外,可能还有一些内核依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 2013-12-09
    • 2010-12-18
    • 1970-01-01
    • 2015-10-11
    • 2011-08-03
    • 2010-10-20
    • 2011-08-09
    相关资源
    最近更新 更多