Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在其他构建环境中编译_Linux_Gcc_Glibc_Opensuse - Fatal编程技术网

Linux 在其他构建环境中编译

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

因此,我们有一个程序正在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函数来解决这个问题,并通过在源代码中添加以下行来替换它:
\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中,以便自动检查依赖关系。类似的东西使这变得非常容易。

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