将C++代码移植到MacOS的建议有哪些?

4

针对即将开始的项目,计划将现有在Windows和Linux上编译的C++代码移植到MacOS(Leopard)系统。该软件是一个命令行应用程序,但可能会计划添加GUI前端。MacOS使用g++编译器。由于与Linux具有相同的编译器,似乎不会出现任何问题,但总会存在一些问题需要注意。

在移植过程中是否有建议或需要注意的问题?

4个回答

8

你的应用程序是否有图形用户界面(GUI),并且使用的是哪种(GUI) (本地/native/Qt/Gtk+)?

如果没有,与 Linux 相比,需要注意的问题主要在动态链接方面。OS X 使用 '-dylib' 和 '-bundle',实际上有两种类型的动态库(运行时可加载和普通的)。Linux 只有一种 (-shared),而且在这方面更加宽松。

如果你的应用程序有 GUI,你需要使用 Objective-C 在 Cocoa 中重新编写整个应用程序。这意味着你需要学习一门新的语言。有些人(如 MS)使用 Carbon (C++ API),但它正在被淘汰。我不建议新项目使用它。

你最好使用 Qt 或 Gtk+。最近几天刚刚宣布了一个本地 Gtk+ 端口 (请参见Imendio)。

p.s. 当然,OS X 也可以运行 X11 二进制文件,但是向任何客户推销这个可能会很困难。他们习惯于 Aqua 接口,并且熟练使用它。只将 X11 视为一个非常短期的解决方案。

p.p.s. OS X 自带的开源附加库数量有限,它们的版本可能落后。而在 Linux 中,你可以轻松地要求用户安装 'libxxx v.y.y',但在 OS X 中,有多种打包方法(fink、macports),对于商业工具,期望所需的库被包含在应用程序中。OS X 为此提供了 '应用程序包' 和 '框架' (本地副本,使应用程序自给自足)。Linux 没有这样的概念。这也会对你的构建系统产生很大的影响;也许你想尝试一些跨平台的构建工具,例如SCons


为什么不把核心代码保留在 C++ 中,然后用 Objective-C 重写 GUI 代码呢? - Ferruccio
是的,那确实是正确的方法。我的“你必须用Cocoa编写整个东西”有点夸张了。 - akauppi

1

你不需要将所有代码都重新编写成Objective-C。有一种奇怪的C++和Objective-C混合使用的方式,可以让你从Objective-C中使用C++代码,因此你可以聪明地将模型代码拆分为C++代码和视图/控制器代码为Objective-C。要使用Objective-C,只需将源代码文件的后缀更改为.mm而不是.m,即可在同一行上混合使用大多数合法的C++和Objective-C语法。


0
我们还没有将其移植到MacOS,但已经将其从Linux移植到了各种Unix系统上,主要工作区域是安装和启动系统,因此预计大部分工作都需要在那里进行(假设您现有的代码已经可以在Linux和Windows之间进行移植)。

0

Macintosh(macosx)实际上是在FreeBSD系统下运行的(尽管它经过了调整)。 在Linux和FreeBSD之间存在一些系统编程方面的差异。 这些差异主要存在于各种系统调用之间...因此,这会对您的应用程序产生多少影响将取决于您的应用程序执行期间所进行的OS系统调用的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接