我想将我的 C/C++ 应用程序移植到 OS X。
我没有 Mac,但我有 Linux 和 Windows。有什么工具可以做到这一点吗?
对于 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's clang
)。
此外,您还可以构建最新的香草GCC
(4.6+)。
LTO 也适用于两者,clang
和GCC
.
目前使用 cctools-870 和 ld64-242。
似乎已经编写了一些脚本来帮助您为 Mac 设置交叉编译;我不能说它们有多好,或者对你的项目有多适用。在文档中,他们参考了这些用于 10.4 的交叉编译的说明,以及这些用于 10.5 的交叉编译的说明;这些说明可能比脚本更有帮助,具体取决于脚本是否适合您的需求。
如果您的程序是免费或开源软件,那么您可能希望创建一个MacPorts端口文件(此处的文档),并允许您的用户使用 MacPorts 构建您的程序;这通常是在 Mac OS X 上安装便携式免费或开源软件的首选方式。过去,MacPorts 可以在 Linux 上运行,因此可以在 Linux 上开发和测试您的 Portfile(尽管它显然需要在 Mac 上进行测试)。
当您尝试在多个平台上工作时,您绝对必须在预期平台上编译/运行/集成/测试。您不能只在一个平台上编译/运行,然后说“哦,它应该在另一个平台上同样工作”。
即使使用像 Java 这样非常好的跨平台语言,您也会遇到一些问题,即它在其他平台上的工作方式并不完全相同。
我发现尊重我的时间/生产力/在多个平台上快速迭代的能力的唯一方法是使用其他平台的 VM。
还有其他解决方案,例如双启动和我没有提到的解决方案,但我发现它们不尊重我的生产力/时间。
以双启动为例:
BAM 花了我 30 分钟的时间,但我没有做任何有成效的事情。
你肯定会以某种方式需要 OS X。即使您没有 Mac,您仍然可以尝试一些替代方案。
你需要一个工具链来交叉编译 mach-o,但即使你有这个,你也没有 Apple 库可以用来开发。不幸的是,我不确定没有它们你将如何移植。
苹果开发本身就是一头奇怪的野兽。OS X 使用 GCC 的一个端口并进行了一些修改以使其“appley”。理论上,可以获取 Apple GCC 和工具链以及 Apple 内核和库头文件的源代码,并在您的 Windows 机器上构建交叉编译器。
你为什么要走这条路,我无法理解。您可以从 600 美元购买便宜的 Mac mini。你投入的时间让交叉编译器正常工作(尤其是使用用于 Unix 工具的 Windows 主机)无论如何可能花费超过 600 美元。
如果你真的热衷于让你的应用程序跨平台查看 Qt、wxWidgets 或 FLTK。所有这些都提供跨平台支持,只需对基本代码进行最少的更改。至少这样,你需要做的就是找到一台 Mac 来编译你的应用程序,如果你有一些技术头脑的朋友不介意让你通过 SSH 访问他们的 Mac,这并不难。
我在网上找到了这个小文档:http: //devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
这准确地描述了你想要什么。我自己对它很感兴趣,虽然还没有测试过(10分钟前发现的)。不过,文档似乎不错。
您可以从该网站租用云中的 mac 。你可以从 1 美元起租到他们,这应该足够了(除非你需要root 访问权限,否则你会看到 49 美元以上)。
有一些交叉编译器设置,但几乎所有这些设置都用于 distcc 风格的分布式编译。据我所知,如果没有真正的 Mac,就无法直接针对 Mac 平台。在不使用 QT 或 wxWidgets 的情况下,您可以获得的最接近的是 OpenStep 与 GNUStep 或类似的,但这不是一个真正的 Cocoa 平台,只是非常接近。