Linux 在其他构建环境中编译
因此,我们有一个程序正在OpenSuse 13.1中编译,配置如下:Linux 在其他构建环境中编译,linux,gcc,glibc,opensuse,Linux,Gcc,Glibc,Opensuse,因此,我们有一个程序正在OpenSuse 13.1中编译,配置如下: 通用条款4.6-15.1.3 GLIBC 2.14 Libcrypto 1.0 但是,它应该与具有以下配置的OpenSuse 10.3一起运行: 通用条款4.2-24 GLIBC 2.6.1-18 Libcrypto 0.9.8 到目前为止,我能找到的唯一依赖项是glibc2.7中引入的\uuuISOC99\uSSCANF。我试图通过编写自己的sscanf函数来解决这个问题,并通过在源代码中添加以下行来替换它: \uu
- 通用条款4.6-15.1.3
- GLIBC 2.14
- Libcrypto 1.0
- 通用条款4.2-24
- GLIBC 2.6.1-18
- Libcrypto 0.9.8
\uuuISOC99\uSSCANF
。我试图通过编写自己的sscanf函数来解决这个问题,并通过在源代码中添加以下行来替换它:
\uuuuu asm\uuuuuuu(“.symver\uuuuu isoc99\u sscanf1,\uuuuu isoc99\u sscanf@@GLIBC\u 2.7”)代码>
现在我只剩下libcrypto依赖项了,当我尝试在旧的OpenSuse环境中运行它时(可能是GCC的东西吗?),它看起来就像是在一个munmap()函数(当我启动程序时)上的segfaulting
所以基本上,我不知道解决这种向后兼容性问题的标准程序是什么。有什么想法吗?通常,您只需在新操作系统上安装旧的gcc、glibc和其他库(由于这个原因,通常作为RPM提供),并确保仅使用这些库进行编译。试图自己修复所有向后的不兼容性是一场艰苦的战斗
为了更彻底,您可以在旧操作系统的chroot中构建,甚至可以将其打包到RPM中,以便自动检查依赖关系。类似的东西使这变得非常容易。为什么不在每个目标上编译一个二进制文件呢?这是可能的,但我想知道是否有更多的人面临这个问题,以及可以采取什么措施来解决这个问题。