我有 GCC 4.7.2 和 OS X 64 位。我想用 Ubuntu 32 位为我的朋友创建一个可执行exe
文件。main.cpp
我试过了,$ g++ main.cpp -o exe
但他说它不起作用,因为我编译为 64 位。
如何编译为 32 位?
我有 GCC 4.7.2 和 OS X 64 位。我想用 Ubuntu 32 位为我的朋友创建一个可执行exe
文件。main.cpp
我试过了,$ g++ main.cpp -o exe
但他说它不起作用,因为我编译为 64 位。
如何编译为 32 位?
你朋友错了。很可能他有一台 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 上构建它们。这是相当复杂的,但是有一些项目,例如crosstool
和crosstool-NG
试图通过提供脚本来简化它来完成工作。
在 Mac 上设置虚拟机并在 VM 中安装 Ubuntu,然后使用 Ubuntu 的本机 GCC 为 Ubuntu 编译可执行文件会简单得多。
apt-get install gcc
你的朋友自己做和编译源代码会更简单。