由于所有Linux发行版使用相同的内核,它们的可执行二进制文件之间是否有任何区别?
如果是,主要区别是什么?或者这是否意味着我们可以构建一个通用的linux可执行文件?
Sam*_*iao 14
所有Linux发行版都使用相同的二进制格式ELF,但仍然存在一些差异:
因此,如果您希望程序在所有发行版上运行,则可能必须静态链接仅依赖于内核系统调用的版本,即使这样您也只能运行指定的arch.
如果你真的想在任何arch上运行程序,那么你必须为所有的arches编译二进制文件,并使用shell脚本启动正确的.
eph*_*ent 13
所有Linux端口(即不同处理器上的Linux内核)都使用ELF作为可执行文件和库的文件格式.特定的ELF二进制文件标记有可以运行的单个体系结构/ OS(尽管某些操作系统具有从其他操作系统运行ELF二进制文件的兼容性).
大多数端口都支持旧的a.out格式.(有些处理器足够新,以至于从来没有任何a.out可执行文件存在.)
一些端口也支持其他可执行文件格式; 例如,PA-RISC端口支持HP-UX的旧SOM可执行文件,μcLinux(nonmmu)端口支持其自己的FLAT格式.
Linux也有binfmt_misc,它允许用户空间为任意二进制格式注册处理程序.一些发行版利用它来执行Windows,.NET或Java应用程序 - 它实际上仍然启动一个解释器,但它对用户完全透明.
Linux on Alpha支持加载通过em86仿真器运行的Intel二进制文件.
可以注册binfmt_misc其他体系结构的可执行文件,以便与qemu-user一起运行.
理论上,人们可以创建一种新的格式 - 也许在ELF中注册一个新的"架构" - 用于胖二进制文件.然后binfmt必须教会内核加载器有关这种新格式,并且您不希望错过ld-linux.so动态链接器和整个构建工具链.对这样的功能一点兴趣,据我所知,没有人在做类似的事情.
| 归档时间: |
|
| 查看次数: |
8550 次 |
| 最近记录: |