gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:19:47 24 4
gpt4 key购买 nike

我需要部署到 Red Hat 4.1.2 box(它有 gcc 4.1.2)。我在 Ubuntu 11.10 上使用 GCC 4.6.1 进行开发。不幸的是,我的构建过程创建的一些二进制文件在 RedHat 机器上不可用。原因似乎是 ABI 更改,根据 another Stackoverflow question由于引入了 STT_GNU_IFUNC 符号。有没有办法阻止导出任何此类符号,以便我的二进制文件可以使用旧的 ABI?我使用 nm 在我的二进制文件中查找任何“i”类型的符号,但没有找到。

我问这个是因为我的其他一些二进制文件以及我构建的一些第 3 方库(tbb、boost)没有使用新的 ABI,因此在 RedHat 机器上运行良好。

希望这很清楚。提前致谢。

最佳答案

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

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

曾经有“apgcc:一个用于制作可移植二进制文件的 GCC 包装器”使这变得容易(从上面引用),但它似乎消失了 ;-(

最简单的选择是在旧机器上构建(我曾经在 RedHat 6.2 上构建,生成的二进制文件无处不在)。您不必在物理机器上实际运行 RH-6.2,只需在 VM 中启动它即可。

另一个相对简单的选择是在 chroot 中构建,再次使用来自旧发行版(例如 RH-6.2)的工具和库。

关于linux - 如何避免二进制文件中的 STT_GNU_IFUNC 符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com