当前位置: 首页 > 面试题库 >

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

戎泰
2023-03-14
问题内容

我需要部署到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机器上运行良好。

希望很清楚。提前致谢。


问题答案:

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

如果需要在将要运行在较旧计算机上的较新计算机上构建二进制文件,请参阅本文档。

曾经有“ apgcc:用于制作可移植二进制文件的GCC包装器”可以简化此操作(从上面引用),但是它似乎已经消失了;-(

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

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



 类似资料:
  • 问题内容: 我可以在不生成编译的.pyc文件的情况下运行python解释器吗? 问题答案: 来自“ Python 2.6的新增功能- 解释器更改” : 现在,可以通过向Python解释器提供-B开关,或者通过在运行解释器之前设置 PYTHONDONTWRITEBYTECODE环境变量来阻止Python编写.pyc或.pyo文件。此设置可作为Python程序的 变量使用,并且Python代码可以更改

  • 我正在使用logback.xml实现SLF4J日志记录,但应用程序正在创建多个日志文件。我需要为一个日期创建一个单一的日志文件,所有的日志级别都在相同的日志文件中。 下面是我的logback.xml配置。

  • 问题内容: 我想用SQL编写脚本,该脚本会将这2个表(A,B)复制到其他2个表(C,D),并具有与A,B相同的结构。 重要提示 : 表C,d是 不是 必要的空 多个进程可以同时调用脚本 表A具有表B的外键(fk_a_b) 假设将表B复制到D之后,这就是我得到的 现在,当我将表A复制到CI时,需要知道,ID = 21现在映射到ID = 51,ID = 32映射到ID = 52。最后,表C将为: 由于

  • 问题内容: 我有以下内容: 但是,并非总是有一个结果会给我以下错误: NoSuchElementException:没有值 那么,如果没有值,我该如何返回? 问题答案: 您可以使用,它比检查要简单得多:

  • 问题内容: 我有一个字节列表作为整数,这类似于 如何将此列表作为二进制文件写入文件? 这行得通吗? 问题答案: 这正是用于: 如果您使用的是Python 3.x,则可以改用(也许应该这样做,因为它可以更好地表明您的意图)。但是在Python 2.x中,这是行不通的,因为它只是的别名。像往常一样,使用交互式解释器进行显示比使用文本进行解释要容易,所以让我这样做。 Python 3.x: Python

  • 当我使用不同的编译器编译这段代码并在十六进制编辑器中检查输出时,我希望在某个地方找到字符串“南希”。 > 输出为,我看不到找到"Nancy"任何地方。 在visual studio(MSVC 1929)中编译相同的代码时,我在十六进制编辑器中看到了完整的字符串: 为什么我在(1)中的字符串中间得到一些随机字节?