【发布时间】:2010-10-16 04:32:43
【问题描述】:
我想将我的 C/C++ 应用程序移植到 OS X。
我没有 Mac,但我有 Linux 和 Windows。有这方面的工具吗?
【问题讨论】:
标签: c++ c macos cross-compiling
我想将我的 C/C++ 应用程序移植到 OS X。
我没有 Mac,但我有 Linux 和 Windows。有这方面的工具吗?
【问题讨论】:
标签: c++ c macos cross-compiling
对于 Linux,有一个预构建的 GCC 交叉编译器(来自公开可用的 Apple 修改后的 GCC 源)。
https://launchpad.net/~flosoft/+archive/cross-apple
2015 年更新
http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/311
对于所有这些选项,您仍然需要一个真正的 mac/i 设备来测试应用程序。
【讨论】:
我创建了一个名为 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。
【讨论】:
似乎已经编写了some scripts,以帮助您为 Mac 设置交叉编译;我不能说它们有多好,或者对你的项目有多适用。在文档中,他们引用these instructions 用于10.4 的交叉编译,these ones 用于10.5 的交叉编译;这些说明可能比脚本更有帮助,具体取决于脚本是否适合您的需求。
如果您的程序是免费或开源软件,那么您可能希望创建一个MacPorts 端口文件(文档here),并允许您的用户使用MacPorts 构建您的程序;这通常是在 Mac OS X 上安装便携式免费或开源软件的首选方式。过去,MacPorts 可以在 Linux 上运行,因此可以在 Linux 上开发和测试您的 Portfile(尽管它显然需要在 Mac 上测试)。
【讨论】:
当您尝试在多个平台上运行时,您绝对必须在预期平台上编译/运行/集成/测试。您不能只在一个平台上编译/运行,然后说“哦,它应该在另一个平台上同样工作”。
即使使用像 Java 这样非常好的跨平台语言,您也会遇到一些问题,即它在其他平台上的工作方式并不完全相同。
我发现在多个平台上尊重我的时间/生产力/快速迭代能力的唯一方法是使用其他平台的 VM。
还有其他解决方案,例如双启动和我没有提到的解决方案,但我发现它们不尊重我的工作效率/时间。
以双启动为例:
BAM我的时间已经过去了 30 分钟,而我没有做任何任何事情有成效。
【讨论】:
你需要一个工具链来交叉编译 mach-o,但即使你有这个,你也不会有 Apple 库来开发。不幸的是,我不确定没有它们你将如何移植。
【讨论】:
Apple 开发本身就是一头奇怪的野兽。 OS X 使用 GCC 的一个端口并进行了一些修改以使其“appley”。理论上,可以获取 Apple GCC 和工具链以及 Apple 内核和库头文件的源代码,并在您的 Windows 机器上构建交叉编译器。
你为什么要走这条路,我无法理解。您可以从 600 美元购买便宜的 Mac mini。你投入的时间让交叉编译器正常工作(尤其是使用用于 Unix 工具的 Windows 主机)无论如何可能花费超过 600 美元。
如果您真的热衷于让您的应用程序跨平台,请查看 Qt、wxWidgets 或 FLTK。所有这些都提供跨平台支持,只需对基本代码进行最少的更改。至少这样你需要做的就是找到一台 Mac 来编译你的应用程序,如果你有一些技术头脑的朋友不介意让你通过 SSH 访问他们的 Mac,这并不难。
【讨论】:
您肯定会以某种方式需要 OS X。即使您没有 Mac,您仍然可以尝试一些 alternatives。
【讨论】:
我在网上找到了这个小文档: http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
这准确地描述了你想要什么。我自己对它很感兴趣,虽然还没有测试过(10分钟前发现的)。不过文档看起来不错。
【讨论】:
您可以从this 网站在云端租用 Mac。你可以从 1 美元起雇佣他们,这应该足够了(除非你需要 root 访问权限,那么你正在寻找 49 美元以上)。
【讨论】:
有一些交叉编译器设置,但几乎所有这些设置都用于 distcc 风格的分布式编译。据我所知,如果没有真正的 Mac,就无法直接针对 Mac 平台。在不使用 QT 或 wxWidgets 的情况下,您可以获得的最接近的是 OpenStep 与 GNUStep 或类似的,但这不是真正的 Cocoa 平台,只是非常接近。
【讨论】:
简短的回答是这样的。您将需要使用像 QT 这样的跨平台库。有像 QT Creator 这样的 IDE,可以让您在一个操作系统上开发并为其他操作系统生成 Makefile。有关跨平台开发的更多信息,请查看this podcast 的跨平台剧集(请注意,该系列尚未结束,而且似乎每周都会推出新剧集)。
正如其他答案所解释的那样,您可能可以在 Windows 或 Linux 上为 Mac 编译,但您将无法测试您的应用程序,因此如果您从事专业编程,或者您可能应该花 600 美元购买 Mac '正在开发开源软件,找一个有 Mac 的开发者来帮助你。
【讨论】: