假设我有一些代码可以编译并适用于普通 i386 和 x86_64 拱门。
在 DOS/Windows 中,可以烘焙单个 MZ-PE 可执行文件,它可以在 DOS 中具有一种功能,在 Windows 中具有另一种功能。或者,在 OSX 中,可以将 i386 和 PPC 架构组合成单个二进制文件。
Linux 中的 i386+x86_64 怎么样(没有多架构之类的东西)?有可能吗,我该怎么做?
假设我有一些代码可以编译并适用于普通 i386 和 x86_64 拱门。
在 DOS/Windows 中,可以烘焙单个 MZ-PE 可执行文件,它可以在 DOS 中具有一种功能,在 Windows 中具有另一种功能。或者,在 OSX 中,可以将 i386 和 PPC 架构组合成单个二进制文件。
Linux 中的 i386+x86_64 怎么样(没有多架构之类的东西)?有可能吗,我该怎么做?
我曾经使用 shell 脚本从文件后面提取应用程序的压缩副本。在 Solaris 上支持 sparc、x86。这是一种相对简单的实现方式,但它仅依赖于使用相关平台的相关二进制文件。
也就是说,在bin-i386
andbin-x86_64
目录中有副本并$(uname -m)
在存根 shell 脚本中使用以指向相关的二进制文件要容易得多,例如
#!/bin/bash -p
exec ${0%/*}/bin-$(uname -m)/${0##*/} "$@"
如果您尝试为非多架构 64 位系统提供 32 位二进制文件,并且因为大多数应用程序将使用动态链接进行编译,那么库是一个额外的问题。如果您不打算进行多架构,那么您 *必须* 提供所有相关库(包括运行时链接器ld.so
),并使用 anLD_LIBRARY_PATH
来选择适当的库。