我需要部署到Red Hat 4.1.2框(具有gcc 4.1.2).我在Ubuntu 11.10上使用GCC 4.6.1进行开发.不幸的是,我的构建过程创建的一些二进制文件在RedHat机器上不可用.原因似乎是ABI更改,根据另一个Stackoverflow问题导致STT_GNU_IFUNC符号的引入.有没有办法阻止导出任何这样的符号,以便我的二进制文件可以使用旧的ABI?我使用nm在我的二进制文件中查找"i"类型的任何符号,但没有找到.
我问这个,因为我的一些其他的二进制文件,以及一些第三方库我建(TBB,升压),不使用新的ABI等运行RedHat的机器上的罚款.
希望很清楚.提前致谢.
Emp*_*ian 10
通常,UNIX系统支持向后二进制兼容性(在旧机器上构建的二进制文件继续在较新的机器上运行),但反之则不然.您不能指望在新系统上构建的二进制文件可以在较旧的系统上运行.STT_GNU_IFUNC只是你遇到的许多问题中的第一个.
如果您需要在较旧的计算机上构建二进制文件,请在较旧的计算机上运行,请参阅此文档.
曾经有过"apgcc:一个用于制作便携式二进制文件的GCC包装器",这使得这很容易(从上面引用),但似乎已经不见了;-(
最简单的选择是在旧机器上构建(我曾经在RedHat 6.2上构建,并且生成的二进制文件在任何地方运行).您不必在物理计算机上实际运行RH-6.2,只需将其置于VM中即可.
另一个相对简单的选择是chroot使用旧版本的工具和库(例如RH-6.2)再次构建.