linux - 发行版之间的可执行二进制文件之间有什么区别吗?

标签 linux kernel

由于所有 Linux 发行版都使用相同的内核,它们的可执行二进制文件之间是否存在差异?

如果是,主要区别是什么?或者这是否意味着我们可以构建一个通用的 linux 可执行文件?

最佳答案

所有 Linux 发行版都使用相同的二进制格式 ELF,但仍存在一些差异:

  1. 不同的 cpu arch 使用不同的指令集。
  2. 同一个cpu arch可能使用不同的ABI,ABI定义了如何使用寄存器文件,如何调用/返回例程。不同的 ABI 不能协同工作。
  3. 即使在相同的体系结构、相同的 ABI 上,这仍然不意味着我们可以将一个分发版中的一个二进制文件复制到另一个分发版中。由于大多数二进制文件不是静态链接的,因此它们依赖于发行版下的库,这意味着不同的发行版可能使用不同的版本或不同的库编译配置。

因此,如果您希望您的程序在所有发行版上运行,您可能必须静态链接一个仅依赖于内核系统调用的版本,即使这样您也只能运行指定的架构。

如果你真的想在任何 arch 上运行一个程序,那么你必须为所有 arch 编译二进制文件,并使用 shell 脚本启动正确的 arch。

关于linux - 发行版之间的可执行二进制文件之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030238/

相关文章:

regex - 仅当匹配 X 时,才使用 sed 从字符串中删除前 N 个和最后 N 个字符

c - 看来disable_irq并不能真正屏蔽中断

linux - 内核模块 : Netfilter hook not providing correct data via sk_buff

linux - 亚马逊aws在数据传输过程中会花费一些费用吗?

php - Jenkins 用户无法运行 composer install

Container_of() 未编译

linux设备驱动文件操作: it is possible to have race conditions?

c - 致力于对链表进行排序,用 c 编写,然后为内核输出

c - 使用 printf 我使用的函数的输出返回错误的值

linux - 如何在 bash shell 脚本中使用表中的命令结果值