如何避免二进制文件中出现 STT_GNU_IFUNC 符号?

2024-10-30 08:36:00
admin
原创
272
摘要:问题描述:我需要部署到 Red Hat 4.1.2 机器(具有 gcc 4.1.2)。我在 Ubuntu 11.10 上使用 GCC 4.6.1 进行开发。不幸的是,我的构建过程创建的一些二进制文件在 RedHat 机器上不可用。原因似乎是 ABI 更改,根据另一个 Stackoverflow 问题,这是由于...

问题描述:

我需要部署到 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,boost)没有使用新的 ABI,因此可以在 RedHat 机器上运行良好。

希望您说得清楚。提前致谢。


解决方案 1:

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

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

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

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

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

解决方案 2:

交叉编译到较旧的 Linux 可能非常困难,这只是您将遇到的众多问题之一。

也就是说,可以通过添加来解决 ABI 兼容性问题-Wl,-fno-jump-tables

解决方案 3:

由于APGCC似乎不再可用(也许除了这里和这里)。这些glibc 标头似乎是目前通过包含较旧的标头文件之一从 C 代码生成可移植 Linux 二进制文件的最便捷方法。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1323  
  IPD研发管理体系作为一种先进的研发管理理念和方法,对于打造优质产品体验起着至关重要的作用。它涵盖了从产品规划、研发、上市到生命周期管理的全流程,通过整合资源、优化流程、加强团队协作等方式,确保产品能够精准满足用户需求,提升用户满意度和忠诚度。IPD研发管理体系的核心原则IPD研发管理体系以市场驱动为核心原则。这意味着...
IPD集成产品开发   4  
  IPD(Integrated Product Development)产品开发流程作为一种先进的产品开发管理模式,在众多企业中得到广泛应用。它强调跨部门团队协作、并行工程以及基于市场的产品开发理念,旨在提高产品开发效率、缩短产品上市时间、提升产品质量。而成本控制在产品开发过程中至关重要,关乎企业的利润空间和市场竞争力。...
华为IPD流程   3  
  IPD(Integrated Product Development)产品开发流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它从多个维度对产品开发过程进行优化和整合,为企业创新提供了强大的支撑。通过实施IPD产品开发流程,企业能够更加高效地将创意转化为具有市场竞争力的产品,从而在激烈的市场竞争中占据优...
华为IPD流程管理   2  
  华为作为全球知名的科技企业,其产品质量在市场上有口皆碑。华为IPD产品开发流程在确保产品质量方面发挥了至关重要的作用。IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理思想、模式和方法。它打破了传统产品开发中各部门之间的壁垒,强调跨部门团队协作,从产品...
IPD集成产品开发流程   2  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用