-3

我有 GCC 4.7.2 和 OS X 64 位。我想用 Ubuntu 32 位为我的朋友创建一个可执行exe文件。main.cpp我试过了,$ g++ main.cpp -o exe但他说它不起作用,因为我编译为 64 位。

如何编译为 32 位?

4

1 回答 1

4

你朋友错了。很可能他有一台 32 位机器,而您已经创建了 64 位可执行文件,但即使您编译为 32 位(通过编译和链接来完成-m32),它仍然有很多其他原因不会工作。Mac OS X 和 Ubuntu 是完全不同的系统,为其中一个编译的代码不会在另一个上运行。

任何单一的 GCC 版本只能为单一目标生成代码,即 CPU 和操作系统的单一组合。您系统上的 GCC 是针对 Mac OS X 构建的,即它是一个本地编译器,这意味着它为运行它的同一系统生成代码。

要为 Ubuntu 生成可执行文件,您需要一个不同的 GCC 版本,一个使用--target=i686-unknown-linux-gnu. 如果该 GCC 在您的 Mac 上运行,那么它将是一个交叉编译器,这意味着它在一个系统上运行,但为不同类型的系统生成代码。

要安装和使用交叉编译器,您还需要交叉目标的所有 C 库,因此您需要获取 glibc 源的副本并使用交叉编译器在 Mac 上构建它们。这是相当复杂的,但是有一些项目,例如crosstoolcrosstool-NG试图通过提供脚本来简化它来完成工作。

在 Mac 上设置虚拟机并在 VM 中安装 Ubuntu,然后使用 Ubuntu 的本机 GCC 为 Ubuntu 编译可执行文件会简单得多。

apt-get install gcc你的朋友自己做和编译源代码会更简单。

于 2013-01-08T01:15:05.777 回答