linux – 如何避免二进制文件中的STT_GNU_IFUNC符号?

前端之家收集整理的这篇文章主要介绍了linux – 如何避免二进制文件中的STT_GNU_IFUNC符号?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要部署到Red Hat 4.1.2框(具有 gcc 4.1.2).我在Ubuntu 11.10上使用GCC 4.6.1进行开发.不幸的是,我的构建过程创建的一些二进制文件在RedHat机器上不可用.原因似乎是ABI变化,根据 another Stackoverflow question引入STT_GNU_IFUNC符号.有没有办法阻止导出任何这样的符号,以便我的二进制文件可以使用旧的ABI?我使用nm在我的二进制文件中查找“i”类型的任何符号,但没有找到.

我问这个是因为我构建的其他二进制文件以及一些第三方库(tbb,boost)都没有使用新的ABI,所以在RedHat机器上运行正常.

希望很清楚.提前致谢.

解决方法

通常,UNIX系统支持向后二进制兼容性(在旧机器上构建的二进制文件继续在较新的机器上运行),但反之则不然.您不能指望在新系统上构建的二进制文件可以在较旧的系统上运行. STT_GNU_IFUNC只是您遇到的许多问题中的第一个.

如果需要在较旧的机器上构建二进制文件,请在较旧的机器上运行,请参阅this文档.

曾经有过“apgcc:一个GCC包装器来制作便携式二进制文件”,这使得这很容易(从上面引用),但似乎已经不见了;-(

最简单的选择是在旧机器上构建(我曾经在RedHat 6.2上构建,并且生成的二进制文件随处可见).您不必在物理计算机上实际运行RH-6.2,只需将其置于VM中即可.

另一个相对容易的选择是在chroot中构建,再次使用旧版本的工具和库(例如RH-6.2).

猜你在找的Linux相关文章