c - 如果我不小心在 ARM 上运行 x86 二进制文件,如何显示错误消息?

标签 c gcc x86 arm portability

在我的项目中,我们正在构建应用程序以在 x86 和 ARM 上的 Linux 上运行。不小心,我在 ARM 上运行了 x86 二进制文件,令我惊讶的是二进制文件启动了——有点像。它将其中一个字符串文字写入标准输出,并立即以段错误结束。

没有显示“此二进制文件无法在此平台上运行”等有意义的消息,这是我假设会发生的事情。

在技术上是否可以设置我的编译器/链接器/任何东西,如果在错误的架构上启动,输出二进制文件将根本不会运行?或者会显示一些有意义的消息?

最佳答案

你要的是FatELF .

由于它实际上不受支持,您可以编写一个 shell 脚本,将可执行文件的内容放在那里(base64 编码),然后将正确架构的正确可执行文件写入/tmp,如果该架构不支持支持,您可以显示错误消息。

这样一来,您将拥有一个适用于所有处理器架构的所有 Unix/Linux/Mac 平台的可执行文件,而不依赖于用户做出(错误的)决定。

关于c - 如果我不小心在 ARM 上运行 x86 二进制文件,如何显示错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399973/

相关文章:

C++:所有 boost 路径操作段错误 (OSX/GCC)

linux - NASM 你能解释一下为什么我的代码会返回一个段错误吗?

c - 以附加模式打开文件时,如何重新定位文件指针?

c - 如何在 C 中将多个字符串值存储到一个字符串中?

c - 如何为递归类型创建 Storable 实例?

c - 如何在多个文件中使用内联函数

assembly - iret 和 iretd,iretq 和有什么不一样?

x86 - 在这种情况下 _mm_movehdup_ps 和 _mm_shuffle_ps 有什么区别?

C - 数组中的数组

C : Sorting a 2d array using bubblesort algorithm only works one-way