4

对于即将到来的项目,计划将在 Windows 和 Linux 上编译的现有 C++ 代码移植到 MacOS(豹)。该软件是命令行应用程序,但可能会计划一个 GUI 前端。MacOS 使用 g++ 编译器。通过使用与 Linux 相同的编译器,似乎不会有任何问题,但总会有。

港口期间有什么建议或问题需要注意吗?

4

4 回答 4

8

您的应用程序是否有 GUI,以及哪个(本机/Qt/Gtk+)?

如果没有,需要注意的问题(与 Linux 相比)主要在动态链接区域。OS X 使用“-dylib”和“-bundle”,实际上有两种动态库(运行时可加载库和普通库)。Linux只有一种(-shared),无论如何都比较宽松。

如果你的应用有 GUI,你需要在 Cocoa 中使用 Objective-C 重新编码。这意味着您也将进入一门新语言。有些人(比如 MS)已经使用了 Carbon(C++ API),但它正在被逐步淘汰。我不会向新项目推荐这个。

你最好的运气是使用 Qt 或 Gtk+。几天前已经(重新)宣布了一个原生 Gtk+ 端口(参见Imendio)。

ps OS X 当然也运行 X11 二进制文件,但是将其推向您的任何客户可能是一条艰难的道路。他们习惯于使用 Aqua 界面,并因此而富有成效。考虑 X11 只是一个非常短期的解决方案。

pps OS X 附带的开源插件库的数量是有限的,它们的版本可能会落后。而在 Linux 中,您可以轻松地要求用户安装“libxxx vyy”,而在 OS X 中,有多种打包方法(fink、macports),对于商业工具,所需的库应该包含在应用程序中。OS X 为此提供了“应用程序包”和“框架”(本地副本,使应用程序自给自足)。Linux 没有这样的概念。这也会对你的构建系统产生很大的影响;也许您想在所有平台上尝试SCons 之类的东西?

于 2008-09-28T10:51:23.673 回答
1

您不需要将所有内容重新编码为 Objective-C。C++ 和 Objective-C 有一个奇怪的混蛋,它允许你使用 Objective-C 中的 C++ 代码,因此你可以智能地拆分 C++ 中的模型代码和 Objective-C 中的视图/控制器代码。要使用 Objective-C,只需使用 .mm 而不是 .m 为源代码文件添加后缀,即使在同一行中,您也可以混合大多数合法的 C++ 和 Objective-C 语法。

于 2008-10-07T14:29:22.503 回答
0

我们还没有移植到 MacOS,但一直在从 Linux 移植到各种 Unix,主要工作领域是安装和启动系统,所以希望将大部分工作放在那里(假设你现有的已经可以在 Linux 之间移植)和窗口)。

于 2008-09-28T10:37:46.450 回答
0

Macintosh (macosx) 本质上是底层的 FreeBSD(尽管它已经过调整)。Linux 和 FreeBSD 在系统编程方面存在一些差异。这些差异主要存在于各种系统调用之间......所以这对您的影响程度将取决于您的应用程序正在做什么以及您在执行期间进行的操作系统系统调用类型。

于 2008-09-28T18:15:26.243 回答