【问题标题】:Compiling in other build environment在其他构建环境中编译
【发布时间】:2012-08-02 07:05:07
【问题描述】:

所以我们有这个程序正在 OpenSuse 13.1 中编译,配置如下:

  • GCC 4.6-15.1.3
  • GLIBC 2.14
  • Libcrypto 1.0

但是,它应该与具有以下配置的 OpenSuse 10.3 一起运行:

  • GCC 4.2-24
  • GLIBC 2.6.1-18
  • Libcrypto 0.9.8

到目前为止,我能找到的唯一依赖项是 GLIBC 2.7 中引入的 __isoc99_sscanf。我尝试通过编写自己的 sscanf 函数来解决此问题,并通过在源代码中添加以下行来替换它: __asm__(".symver __isoc99_sscanf1, __isoc99_sscanf@@GLIBC_2.7");

现在我留下了 libcrypto 依赖项,当我尝试在旧的 OpenSuse 环境中运行它时,它看起来也在 munmap() (当我跟踪程序时)函数上出现段错误(可能是 GCC 的东西? )

所以基本上,我真的不知道解决这种向后兼容性问题的标准程序是什么。有什么想法吗?

【问题讨论】:

  • 为什么不简单地在每个目标上编译一个二进制文件?
  • 这是可能的,但我想知道是否有更多的人面临这个问题以及可以采取什么措施来解决这个问题。

标签: linux gcc glibc opensuse


【解决方案1】:

通常,您只需在新操作系统上安装较旧的 gcc、glibc 和其他库(因此通常以 RPM 的形式提供)并确保仅使用这些库进行编译。尝试自己解决所有向后不兼容的问题是一场艰苦的战斗。

为了更彻底,您可以在旧操作系统的 chroot 中构建,甚至可以将其打包到 RPM 中,以便自动检查依赖关系。像Open Build Service 这样的东西让这很容易。

【讨论】:

    猜你喜欢
    • 2020-01-04
    • 2019-04-04
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多