当我的目标是 64 位 arch 时,我需要交叉编译我的程序吗?主机是来自 x86 系列的 32 位架构?

Sen*_*Sen 6 linux compiling

我有场景,其中
我的主机是:86的32位处理器
我的目标是:86的64位处理器

我有一些问题 :

  • 我想知道我是否可以使用可用的 gcc 在我的主机中简单地编译一个程序并在目标上运行它?
  • 我是否需要为 x86 64 位处理器交叉编译它?如果是,我如何在编译时指定它?
  • 我是否需要使用单独的工具链来交叉编译程序?

Gil*_*il' 5

所有 amd64(即 64 位 x64)处理器都可以运行 32 位 x86 二进制文件。此外,在大多数操作系统上,您可以在 amd64 操作系统上运行 x86 程序。因此通常可以在 amd64 处理器上部署 x86 二进制文件。

这样做是否可取是另一回事。64 位操作系统通常带有一组受限的 32 位库,因此如果您的程序使用一些不常见的库,安装 64 位可执行文件会更容易。根据您的应用程序,32 位或 64 位二进制文​​件可能有也可能没有性能优势。

如果您决定要部署 64 位可执行文件,您将需要一个用于在 x86 架构上运行的 amd64(又名 x86_64)架构的交叉编译环境。这意味着要链接的编译器和静态库。

gcc 安装可以共享前端并包含多个后端。但是在 x86 平台上没有多少发行版带有 amd64 开发工具,因此您可能必须获得自己的(gcc 交叉编译相当简单)。链接库也是如此(当然,一旦有了编译器,就可以从源代码重新编译它们)。

例如,x86 上的 Ubuntu 10.04 带有一个“multilib”版本的 gcc 和一个 amd64 后端,以及一小组 64 位开发包(libc6-dev-amd64安装 libc6-dev-amd64 http://bit. ly/software-small和依赖和依赖包)。