【问题标题】:Linux single binary for i386 and x86_64适用于 i386 和 x86_64 的 Linux 单一二进制文件
【发布时间】:2013-10-03 15:28:08
【问题描述】:

假设我有一些代码可以编译并适用于普通 i386 和 x86_64 拱门。

在 DOS/Windows 中,可以烘焙单个 MZ-PE 可执行文件,它可以在 DOS 中具有一种功能,在 Windows 中具有另一种功能。或者,在 OSX 中,可以将 i386 和 PPC 架构组合成单个二进制文件。

Linux 中的 i386+x86_64 怎么样(没有多架构之类的东西)?有可能吗,我该怎么做?

【问题讨论】:

    标签: linux executable 32bit-64bit


    【解决方案1】:

    我曾经使用 shell 脚本从文件后面提取应用程序的压缩副本。在 Solaris 上支持 sparc、x86。这是一种相对简单的实现方式,但它仅依赖于使用相关平台的相关二进制文件。

    也就是说,在 bin-i386bin-x86_64 目录中复制并在存根 shell 脚本中使用 $(uname -m) 来指向相关的二进制文件(例如)要容易得多。

    #!/bin/bash -p
    
    exec ${0%/*}/bin-$(uname -m)/${0##*/} "$@"
    

    如果您尝试为非多架构 64 位系统提供 32 位二进制文​​件,并且因为大多数应用程序将使用动态链接进行编译,那么 是一个额外的问题。如果您不打算进行多架构,那么您 *必须 * 提供所有相关库(包括运行时链接器 ld.so),并使用 LD_LIBRARY_PATH 选择适当的库.

    【讨论】:

    • 是的,我注意到我说错了,所以我改变了最后一段。它实际上代表了我过去必须处理的情况
    • 确实,在 ELF 级别上似乎没有比这更好的了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2014-11-13
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多