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

21

我正在运行Mac OS X 10.5.8,希望使用GCC 4.1.2编译针对CentOS 5.3的目标文件。请问我应如何:

  1. 编译GCC 4.1.2工具链及相关工具?
  2. 使用该工具链进行交叉编译以针对CentOS 5.3?

非常感谢您的帮助!


你最终采用了什么方案? - sAguinaga
5个回答

15

最简单的解决方案是在虚拟机中运行CentOS 5.3(例如,使用Sun VirtualBox)。这需要最少的设置,具有相当合理的开销(假设您使用英特尔 Mac),并且您将能够实际上进行测试和调试。

如果您真的坚持要交叉编译,您必须构建交叉编译器。指南在这里这里,但请注意:可能需要几天时间才能做对,然后您仍然需要一个虚拟机来测试结果,所以我认为这种方式没有任何意义。


1
谢谢您的回复。是的,您的建议听起来不错 :D Спасибо! - Viet
还有crosstool-ng,但是我在OS X上的经验有点痛苦,因为它需要在区分大小写的磁盘映像中构建(如果使用保留大小写的文件系统,如HFS+默认设置,则会出现问题),而且必须安装一些GNU或更新版本的某些系统实用程序,以便它尝试在OS X上进行构建。 - James Snyder

6
现在你可以使用Docker for Mac来完成这个操作,因为我没有Mac所以无法测试。Docker基本上创建了一个Linux虚拟机并提供了一些很好的功能。
安装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 ... 或者 ./configure 或者 make 或者 ninja 或者其他命令来进行构建
  • 如果您编写了自动化测试,也可以在此处运行

Docker vs VM

使用 Docker,您可以使用熟悉的终端和主题,按键方式。此外,它启动时和运行时可能会消耗更少的资源。

如果您的应用程序是图形化的,并通过与其 GUI 进行交互来测试,则虚拟机可能仍然是更好的选择(请参见 @employed-russian 的解决方案)。


4

4

2
你可以使用crosstool-ng,或者如果你不想花太多时间去配置它,你可以下载一个预先配置好的交叉编译器,例如Linaro。这里是安装它在Mac OS X上的指南

2
Linaro工具链是为ARM而设计的。原帖作者正在寻找x86的工具链。 - Smoke Liberator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接