80

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

我没有 Mac,但我有 Linux 和 Windows。有什么工具可以做到这一点吗?

4

11 回答 11

50

对于 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. Thomas的这个答案还提供了一个交叉编译工具。

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

于 2012-04-26T21:07:13.490 回答
32

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

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

LTO 也适用于两者,clangGCC.

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

https://github.com/tpoechtrager/osxcross

于 2013-11-10T15:06:33.307 回答
24

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

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

于 2009-03-29T01:56:06.473 回答
6
  1. 获取“ VMware Player
  2. 获取“ Mac OS X 虚拟机映像
  3. 在新操作系统上编译/调试/集成并测试您的代码,以确保一切正常

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

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

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

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

以双启动为例:

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

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

于 2009-03-29T14:24:08.190 回答
4

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

于 2009-03-29T01:50:55.987 回答
4

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

于 2009-03-29T01:52:03.817 回答
4

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

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

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

于 2009-03-29T02:26:31.237 回答
3

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

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

于 2009-05-08T11:47:12.250 回答
2

您可以从网站租用云中的 mac 。你可以从 1 美元起租到他们,这应该足够了(除非你需要root 访问权限,否则你会看到 49 美元以上)。

于 2014-12-17T15:56:58.490 回答
-1

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

于 2009-03-29T06:16:18.457 回答
-4

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

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

于 2009-03-29T02:39:00.647 回答