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

Posted

技术标签:

【中文标题】如何在 Linux 或 Windows 中为 OS X 编译?【英文标题】:How to Compile for OS X in Linux or Windows? 【发布时间】:2010-10-16 04:32:43 【问题描述】:

我想将我的 C/C++ 应用程序移植到 OS X。

我没有 Mac,但我有 Linux 和 Windows。有这方面的工具吗?

【问题讨论】:

【参考方案1】:

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

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

2015 年更新

    经过这么多年,行业标准 IDE 现在支持 OSX/ios/android

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

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

    Thomas 的这个answer 还提供了交叉编译工具。

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

【讨论】:

效果如何?例如,它是否允许为 MacOSX 编译 Qt? 这是一个完全有效的 GCC 4.2,能够编译大型库。但是,它尚未针对 10.7、10.8 或 10.9 SDK 进行更新,因此现在可以认为它已过时。我一直用它在 C/C++ 中编译我自己的项目,只是为了测试它是否可以移植并修复一些明显的不兼容问题,然后我在真正的 mac 上构建了它。 如何在 Fedora 上安装它? @panzi:我只在 CrunchBang(Debian 的一个变种)上使用过它,也许你应该解压缩 .deb 档案并尝试配置路径。或者,像往常一样,尝试编译源代码。也许这个答案现在提供了更好的选择:***.com/a/19891283/1182653 不幸的是,虽然微软宣布 Visual Studio Connect 支持包括 clang 在内的其他编译器,但我找不到任何关于如何实际定位 MacOS 的信息。【参考方案2】:

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

它目前支持clang 3.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) 测试。【参考方案3】:

似乎已经编写了some scripts,以帮助您为 Mac 设置交叉编译;我不能说它们有多好,或者对你的项目有多适用。在文档中,他们引用these instructions 用于10.4 的交叉编译,these ones 用于10.5 的交叉编译;这些说明可能比脚本更有帮助,具体取决于脚本是否适合您的需求。

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

【讨论】:

现在还是自制而不是 macports。 @jcoffland 不,反过来。它用于在 Linux 上构建 OS X 应用程序。阅读标题。 “交叉编译 on Linux for Mac OS X 10.3 - 10.5”(强调)。请注意,这个答案现在已经很老了(差不多 7 岁了,哎呀!),下面的后面的答案有更多的最新信息。【参考方案4】:
    获取“VMware Player” 获取“Mac OS X vm image” 在新操作系统上编译/调试/集成并测试您的代码,以确保一切正常

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

即使使用像 Java 这样非常好的跨平台语言,您也会遇到一些问题,即它在其他平台上的工作方式并不完全相同。

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

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

以双启动为例:

    我在 OS 1 上进行了更改 重启进入 OS 2 忘记 OS 1 上的某些内容 重启进入 OS 1 在 OS 1 上进行更改 重新启动到 OS 2 ... 再次...

BAM我的时间已经过去了 30 分钟,而我没有做任何任何事情有成效。

【讨论】:

3次开机需要30分钟,需要新硬件;并且可能能够从另一个操作系统访问和编辑一个操作系统的文件系统。但我理解这种情绪,也更喜欢虚拟机,因为它们让我大部分时间都可以将它们视为专用的物理机器。 重启所花费的时间不仅仅是启动时间,而是关闭时间、重新启动守护进程、设置开发环境、检查您是否还有最近的结帐版本控制系统等。 更不用说我的大脑失去了所有缓存的一致性,需要慢慢地重新缓存我需要做的所有事情......而且当网络浏览器意外打开时很可能会失去工作效率。 @MartinKällman 这违反了 Apple 许可协议。其合法性取决于您所在的国家/地区。 这可能在技术上违反随机许可协议,但您始终可以购买 Mac Pro 并在其上使用 VM 运行所有三个操作系统。那么,为什么你不能买一个漂亮的 Windows 盒子并做同样的事情呢?允许其他任何事情都是反竞争的做法,在我的书中,这完全是非法的(或者应该是)。【参考方案5】:

你需要一个工具链来交叉编译 mach-o,但即使你有这个,你也不会有 Apple 库来开发。不幸的是,我不确定没有它们你将如何移植。

【讨论】:

如果你有跨工具链,你可以简单地从 OS X 复制库。 复制是可行的方法,但您也需要标头/静态库。【参考方案6】:

Apple 开发本身就是一头奇怪的野兽。 OS X 使用 GCC 的一个端口并进行了一些修改以使其“appley”。理论上,可以获取 Apple GCC 和工具链以及 Apple 内核和库头文件的源代码,并在您的 Windows 机器上构建交叉编译器。

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

如果您真的热衷于让您的应用程序跨平台,请查看 Qt、wxWidgets 或 FLTK。所有这些都提供跨平台支持,只需对基本代码进行最少的更改。至少这样你需要做的就是找到一台 Mac 来编译你的应用程序,如果你有一些技术头脑的朋友不介意让你通过 SSH 访问他们的 Mac,这并不难。

【讨论】:

我可以访问许多 Windows 机器。然而,我更喜欢在为 Linux 构建的同时生成 Windows 二进制文件。当然,程序必须在 Windows 上进行测试,但很方便看到程序至少可以一步构建所有目标平台。 更不用说您可能没有 Mac,但有兴趣让其他人(希望在 Mac 上使用您的应用程序)测试应用程序,而无需自己编译。 我认为值得注意的是,Apple 不再在 XCode 中使用 GCC,他们现在使用 Clang/LLVM。【参考方案7】:

您肯定会以某种方式需要 OS X。即使您没有 Mac,您仍然可以尝试一些 alternatives。

【讨论】:

【参考方案8】:

我在网上找到了这个小文档: http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt

这准确地描述了你想要什么。我自己对它很感兴趣,虽然还没有测试过(10分钟前发现的)。不过文档看起来不错。

【讨论】:

【参考方案9】:

您可以从this 网站在云端租用 Mac。你可以从 1 美元起雇佣他们,这应该足够了(除非你需要 root 访问权限,那么你正在寻找 49 美元以上)。

【讨论】:

不过,这假设人们想要将源复制到“云中”的某台机器上。对非 FLOSS 的假设。 不是很长期。用了 30 次以后,买个 mac 会更便宜。【参考方案10】:

有一些交叉编译器设置,但几乎所有这些设置都用于 distcc 风格的分布式编译。据我所知,如果没有真正的 Mac,就无法直接针对 Mac 平台。在不使用 QT 或 wxWidgets 的情况下,您可以获得的最接近的是 OpenStep 与 GNUStep 或类似的,但这不是真正的 Cocoa 平台,只是非常接近。

【讨论】:

即使是 Qt 也需要交叉编译工具链才能在非 OSX 平台上构建 OSX 二进制文件。【参考方案11】:

简短的回答是这样的。您将需要使用像 QT 这样的跨平台库。有像 QT Creator 这样的 IDE,可以让您在一个操作系统上开发并为其他操作系统生成 Makefile。有关跨平台开发的更多信息,请查看this podcast 的跨平台剧集(请注意,该系列尚未结束,而且似乎每周都会推出新剧集)。

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

【讨论】:

以上是关于如何在 Linux 或 Windows 中为 OS X 编译?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OS Lollipop 在 Java 中为 Android 裁剪图像

如何使用 FLTK 在 Windows、Mac OS X 和 Linux 中使窗口透明?

在 C/C++ 程序中,系统(windows、linux、mac OS X)如何调用 main() 函数?

如何在windows中为要在linux中执行的.sh文件分配执行权限

如何像处理语言一样轻松地在 c++ 中为 windows 和 linux 绘制原始像素? [关闭]

Python:在 Windows 或 Linux 上获取挂载点