Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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?我
我需要部署到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?我使用NR_527_11845@在我的二进制文件中查找“i”类型的任何符号,但没有找到.

我问这个是因为我构建的其他二进制文件以及一些第三方库(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符号?全部内容,希望文章能够帮你解决linux – 如何避免二进制文件中的STT_GNU_IFUNC符号?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。