2013-01-07 40 views
-3

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

如何编译32位?

+2

它不起作用 - 你的朋友需要在他的Linux系统上重新编译源代码。 –

+0

好吧,明白了。 Thanx – fpiro07

+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并自己编译源代码会更简单。

+0

是的,我想我要在我的Mac上的虚拟机上进行编译。非常感谢 – fpiro07

相关问题