如何从Mac OS X交叉编译到Linux x86?

时间:2009-11-21 11:44:13

标签: gcc macos centos cross-compiling gnu-toolchain

我正在运行Mac OS X 10.5.8并希望使用GCC 4.1.2编译目标CentOS 5.3。我怎么能:

  1. 编译GCC 4.1.2工具链和相关工具?
  2. 使用该工具交叉编译目标CentOS 5.3?
  3. 非常感谢任何帮助!

5 个答案:

答案 0 :(得分:9)

您最简单的解决方案是在VM中运行CentOS 5.3(例如Sun VirtualBox)。这需要最少的设置,具有相当合理的开销(假设是Intel Mac),并且您将能够实际测试调试您正在构建的内容。

如果您真的坚持交叉编译,则必须构建交叉编译器。说明是herehere,但请注意:它可能需要几天才能正确完成,然后您需要VM来测试结果,所以我没有看到这样做的任何意义。

答案 1 :(得分:3)

使用Cocotron直接从Xcode进行交叉编译。这里有一个很好的入门指南:http://blog.tlensing.org/tag/cocotron/

答案 2 :(得分:1)

您可以使用crosstool-ng,或者如果您不想花太多时间进行配置,可以下载预配置的交叉编译器,如Linaro。 这是guide用于在Mac OS X中安装它。

答案 3 :(得分:1)

我努力让 crosstool-ng 在x86_64 Linux的OSX 10.9上构建。我使用Jeff Preshing撰写的how to build a gcc cross-compiler非常有用的帖子和他的脚本here作为一个适合我的脚本的基础。在我的OSX版本上编译glibc时,他在链接中的脚本不起作用(对于从OSX到Linux的交叉编译,这似乎是一个非常普遍的抱怨)。

我的脚本在这里:https://github.com/johnlondon/Cross-compile-toolchain-for-linux-on-OSX

答案 4 :(得分:1)

如今,您可能可以使用Docker for Mac来完成此操作,因为没有Mac,所以我没有对其进行测试。 Docker基本上会创建一个Linux VM,并提供一些完善的功能。

安装docker并准备您的构建映像。

  • 安装docker
  • 使用docker run -ti centos5.3 /bin/bash启动一个新容器(在官方Docker Hub中搜索您想要的目标)
  • 安装所需的gcc版本(类似sudo yum group install "Development Tools"
  • 退出您的容器
  • 运行docker ps -a获取您的容器ID
  • 将您的容器备份为基础构建映像docker commit [id] centos:build

进行构建

现在,您可以将创建的构建环境用于CentOS构建。

  • 要在构建环境装入内部工作目录的同时启动构建环境,您可以使用类似docker run -it --mount type=bind,source=$(pwd),target=/mnt centos:build /bin/sh -c "cd /mnt && bash"
  • 然后运行gcc ..../configuremakeninja或进行构建的任何方法
  • 如果您编写了一些内容,也可以在此处运行自动化测试

Docker vs VM

借助docker,您可以将心爱的终端与熟悉的主题和键盘映射一起使用。此外,它很可能会消耗更少的启动和运行资源。

如果您的应用程序是图形应用程序,并且您通过与它的GUI交互使用它进行了测试,那么我猜VM仍然是一个更好的选择(请参阅@ employed-russian的解决方案)。