我想将我的C / C ++应用程序移植到OS X.
我没有Mac,但我有Linux和Windows。有没有这方面的工具?
答案 0 :(得分:48)
对于Linux,有一个预建的GCC交叉编译器(来自公开发布的Apple修改后的GCC源代码)。
https://launchpad.net/~flosoft/+archive/cross-apple
2015年更新
http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/311
答案 1 :(得分:29)
我创建了一个名为OSXCross的项目,旨在从Linux中定位OS X(10.4-10.9)。
它目前支持clang
3.2至3.8(主干)(您可以使用您的dist clang
)。
此外,您还可以构建最新的香草GCC
(4.6+)。
LTO同样适用于clang
和GCC
。
目前使用cctools-870和ld64-242。
答案 2 :(得分:22)
似乎已经编写了some scripts来帮助您设置Mac的交叉编译;我不能说它们有多好,或者对你的项目有多适用。在文档中,他们引用these instructions进行交叉编译10.4,these ones进行交叉编译10.5;这些说明可能比脚本更有用,具体取决于脚本满足您需求的程度。
如果您的程序是免费或开源软件,那么您可能希望创建一个MacPorts端口文件(文档here),并允许您的用户使用MacPorts构建您的程序;这通常是在Mac OS X上安装便携式免费或开源软件的首选方式。过去已知MacPorts可以在Linux上运行,因此可以在Linux上开发和测试您的Portfile(尽管显然需要它)在Mac上测试。
答案 3 :(得分:6)
当您尝试在多个平台上运行时,您绝对必须在目标平台上编译/运行/集成/测试。你不能只在一个平台上编译/运行然后说“哦,它应该在另一个平台上工作相同”。
即使使用像Java这样的非常好的跨平台语言,您也会遇到一些问题,而这些问题在其他平台上无法完全相同。
我发现尊重我的时间/生产力/能力以在多个平台上快速迭代的唯一方法是使用其他平台的VM。
还有其他解决方案,如双启动和我没有提到的解决方案,但我发现他们不尊重我的生产力/时间。
以双启动为例:
BAM 有30分钟的时间,我没有任何生产力。
答案 4 :(得分:4)
你肯定会以某种方式需要OS X.即使您没有Mac,您仍然可以尝试一些alternatives。
答案 5 :(得分:4)
你需要一个工具链来交叉编译为mach-o,但即使你有这样的工具,你也不会有Apple库来开发。不幸的是,我不确定如果没有它们你将如何移植。
答案 6 :(得分:4)
为什么你想要沿着这条路走下去超出我的范围。你可以从$ 600起买一台便宜的Mac mini。您投入使交叉编译器正常工作的时间(特别是使用适用于Unix工具的Windows主机)的成本可能会超过600美元。
如果你真的热衷于让你的应用跨平台看看Qt,wxWidgets或FLTK。所有这些都提供跨平台支持,只需对基本代码进行最少的更改。至少你需要做的就是找一台Mac来编译你的应用程序,如果你有一些技术头脑的朋友不介意给你SSH访问他们的Mac,那就不难了。
答案 7 :(得分:3)
我在网上发现了这个小文档: http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
这准确描述了你想要的东西。我自己对此感兴趣,但尚未测试过(10分钟前发现)。但是文档似乎很好。
答案 8 :(得分:2)
您可以从this网站在云中招聘广告。你可以从$ 1雇用它们,这应该足够了(除非你需要 root访问权限,然后你看$ 49 +)。
答案 9 :(得分:-2)
有一些交叉编译器设置,但几乎所有设置都适用于distcc风格的分布式编译。据我所知,如果没有Mac,就无法直接瞄准Mac平台。你可以在不使用QT或wxWidgets的情况下获得最接近的是使用GNUStep或类似的OpenStep,但这不是真正的Cocoa平台,只是非常接近。
答案 10 :(得分:-5)
简短的回答是那样的。您需要使用像QT这样的跨平台库。像QT Creator这样的IDE可以让你在一个操作系统上开发并为其他操作系统生成Makefile。有关跨平台开发的更多信息,请查看this podcast的跨平台剧集(请注意,该系列节目尚未结束,新剧集似乎每周都会出现)。
正如其他答案解释的那样,您可以在Windows或Linux上编译Mac,但是您将无法测试您的应用程序,因此如果您正在进行专业编程,或者如果您正在进行专业编程,那么您应该花费600美元购买Mac正在开发开源软件,找到一位可以帮助你的Mac开发人员。