如何在Linux或Windows中为OS X进行编译?


74

我想将C / C ++应用程序移植到OSX。

我没有Mac,但有Linux和Windows。有什么工具吗?

Answers:


23

似乎已经编写了一些脚本来帮助您设置Mac的交叉编译。我不能说它们有多好,或如何适用于您的项目。在文档中,他们参考这些指令用于10.4交叉编译,以及这些指令用于10.5的交叉编译。这些说明可能比脚本更有用,这取决于脚本满足您的需求的程度。

如果您的程序是免费软件或开源软件,那么您可能希望创建一个MacPorts端口文件(此处的文档),并允许您的用户使用MacPorts构建您的程序。通常,这是在Mac OS X上安装便携式免费或开源软件的首选方法。MacPorts过去在Linux上运行,因此有可能在Linux上开发和测试Portfile(尽管显然需要这样做)在Mac上进行测试)。


11
或现在使用自制软件代替Macports。
法尔肯教授

@jcoffland不,反之亦然。它用于在Linux上构建OS X应用程序。阅读标题。“交叉编译的Linux的Mac OS X 10.3 - 10.5”(强调)。请注意,该答案目前已经非常旧了(差不多7岁了,是的!),下面的后续答案具有更多最新信息。
布赖恩·坎贝尔

49

对于Linux,有一个预建的GCC交叉编译器(来自可公开获得的Apple修改后的GCC来源)。

https://launchpad.net/~flosoft/+archive/cross-apple

2015年更新

  1. 经过这么多年,行业标准的IDE现在支持OSX / iOS / Android。

http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/311

  1. Embarcadero的RadStudio还支持在Windows上构建OSX / iOS / Android应用程序。

  2. 答案托马斯还提供了一个交叉编译工具。

对于所有这些选项,您仍然需要真正的Mac / i设备来测试应用程序。


效果如何?例如,它是否允许为MacOSX编译Qt?
RushPL

4
它是完全有效的GCC 4.2,能够编译大型库。但是,它尚未针对10.7、10.8或10.9 SDK进行更新,因此现在可以认为它已过时。我一直在使用它在C / C ++中编译我自己的项目,只是为了测试它是否可以移植并修复一些明显的不兼容性,然后在真正的mac上构建它。
Viktor Latypov

我如何在Fedora上安装它?
panzi 2015年

@panzi:我只在CrunchBang(Debian的一种变体)上使用过它,也许您应该解压缩.deb档案并尝试配置路径。或者,像往常一样,尝试编译源代码。也许这个答案现在提供了更好的选择:stackoverflow.com/a/19891283/1182653
维克多·拉蒂波夫

不幸的是,尽管Microsoft宣布了Visual Studio Connect支持其他编译器,包括clang,但是我找不到有关如何实际定位MacOS的任何信息。
AnotherParker

30

我创建了一个名为OSXCross的项目,旨在针对Linux上的OS X(10.4-10.9)。

它目前支持clang3.2到3.8(主干)(您可以使用dist的clang)。
此外,您还可以构建最新的香草GCC(4.6+)。

LTO工程,以及,两个,clangGCC

当前使用cctools-870和ld64-242。

https://github.com/tpoechtrager/osxcross


我已经使用了您的项目,它可以完成承诺。使用最新的XCode(7.1)和最新的OSX(10.11.1)进行了测试。
Panayotis 2015年

6
  1. 获取“ VMware Player
  2. 获取“ Mac OS X vm image
  3. 在新操作系统上编译/调试/集成和测试代码,以确保一切正常

当您尝试在多个平台上工作时,绝对必须在目标平台上进行编译/运行/集成/测试。您不能只在一个平台上编译/运行,然后说“哦,它应该在另一平台上也可以工作”。

即使使用像Java这样的非常好的跨平台语言,您也会遇到在其他平台上无法完全相同地工作的问题。

我发现尊重我在多个平台上快速迭代的时间/生产力/能力的唯一方法是使用其他平台的VM。

还有其他一些解决方案,例如双引导,还有我没有提到的解决方案,但我发现它们不尊重我的工作效率/时间。

以双启动为例:

  1. 我在OS 1上进行了更改
  2. 重新启动进入OS 2
  3. 在OS 1上忘记一些东西
  4. 重启进入操作系统1
  5. 在OS 1上进行更改
  6. 重新启动进入OS 2 ...再次...

BAM花费了我30分钟的时间,但我没有做任何有成效的工作。


4
3次启动需要30分钟时,您需要新的硬件。并且可能具有从另一个操作系统访问和编辑一个操作系统的文件系统的能力。但是我理解这种想法,并且也更喜欢VM,因为它们使我可以将它们视为专用的物理计算机。

11
重启所需的时间不仅是启动时间,还包括关机时间,重新启动守护程序,设置开发环境,检查您是否仍拥有来自版本控制系统的最新签出时间,等等。
Arafangion 2010年

12
更不用说我的大脑失去了所有缓存一致性,并且需要缓慢地重新缓存我需要做的所有事情……并且很可能在Web浏览器意外打开时失去生产力。
特雷弗·博伊德·史密斯,

3
@MartinKällman,它违反了Apple许可协议。这种合法性取决于你在哪个国家。
rubenvb

6
从技术上讲,这可能违反了随机许可协议,但是您始终可以购买Mac Pro并使用其上的VM运行所有三个操作系统。那么,为什么不应该能够购买一个不错的Windows盒子并这样做呢?允许其他任何事情都是反竞争行为,在我的书中,完全是非法的(或者应该是非法的)。
smaudet

4

您将需要一个工具链来为mach-o进行交叉编译,但是即使您拥有了该工具链,也无法使用Apple库进行开发。不幸的是,我不确定如果没有它们,您将如何移植。


3
如果您有交叉工具链,你可以简单地复制从OS X的库

尽管您也需要标题/ staticlibs,但是复制是要走的路。
Kotauskas

4

苹果的发展本身就是一个奇怪的野兽。OS X使用GCC端口并进行了一些修改,使其具有“ applet”的风格。从理论上讲,可以获取Apple GCC和工具链以及Apple内核和库标头的源,并可以在Windows计算机上构建交叉编译器。

为什么您要走这条路,这超出了我。您可以从600美元购买便宜的Mac mini。无论如何,您花费大量的时间使交叉编译器正常工作(尤其是使用Windows主机(用于Unix工具))可能要花费600多美元。

如果您真的很想让您的应用跨平台研究Qt,wxWidgets或FLTK。全部都提供对跨平台的支持,而对基本代码的更改却很少。至少,您要做的就是找到一台Mac来在其上编译您的应用程序,如果您有一些技术精湛的朋友不介意让您通过SSH访问Mac的话,这并非难事。


10
我可以访问许多Windows计算机。但是我更喜欢在为Linux构建的同时生成Windows二进制文件。当然,该程序必须在Windows上进行测试,但是非常方便地看到该程序至少一步就可以针对所有目标平台进行构建。
法肯教授,

2
更不用说您可能没有Mac,但希望允许其他人(想要在Mac上使用您的应用程序)测试该应用程序,而不必自己编译。
smaudet

3
我认为值得注意的是,Apple不再在XCode中使用GCC,而是现在使用 Clang / LLVM
Travis Pessetto 2014年



2

您可以从网站在云中租用Mac。您可以从$ 1租用它们,这应该足够了(除非您需要root访问权,否则您的价格在$ 49 +)。


2
但是,这是假设人们想将源复制到“云中”的某台计算机上。对于非FLOSS的假设相当多。
0xC0000022L

不太长远。使用30次后,购买Mac会便宜一些。
西蒙(Simon)

-1

有一些交叉编译器设置,但是几乎所有它们都用于distcc样式的分布式编译。据我所知,如果没有Mac,就无法直接针对Mac平台。您可以不借助QT或wxWidgets而获得的最接近的是带有GNUStep或类似功能的OpenStep,但这不是真正的Cocoa平台,非常接近。


1
甚至Qt都将需要交叉编译工具链来在非OSX平台上构建OSX二进制文件。
Lennart Rolland '04

-4

简短的回答是这样的。您将需要使用QT之类的跨平台库。有一些像QT Creator这样的IDE,可以让您在一个操作系统上进行开发并为其他操作系统生成Makefile。有关跨平台开发的更多信息,请查看此播客的跨平台片段(请注意,该系列尚未结束,并且每周都有新片段出现)。

正如其他答案所解释的那样,您可能可以在Windows或Linux上为Mac编译,但是您将无法测试您的应用程序,因此,如果您正在从事专业编程或工作,则可能应该花600美元购买Mac。在开源软件上,找到可以帮助您的Mac开发人员。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.