2012-08-02 73 views
0

所以我们有这样的计划,正在编制中了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, [email protected]@GLIBC_2.7");

现在我只剩下libcrypto依赖,它也看起来像它的段错误上则munmap( )当我尝试在旧的OpenSuse环境中运行它(可能是一个GCC的东西?)时(当我跨越程序)功能

所以基本上,我不知道什么标准程序是固定这种向后兼容性问题。有关于此的任何想法?

+1

为什么不简单地在每个目标上编译一个二进制文件? – Mat 2012-08-02 07:07:32

+0

这是一种可能性,但我想知道是否有更多的人面临这个问题,并且可以做些什么来解决这个问题。 – Evert 2012-08-02 07:09:32

回答

0

通常情况下,您只需在新操作系统上安装旧的gcc,glibc和其他库(通常由于这个原因,可以作为RPM使用),并确保只用这些库进行编译。尝试解决所有后向不兼容问题是一场艰苦的战斗。

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