windows 跨平台 Objective-C / C++ 开发

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/863240/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 12:29:01  来源:igfitidea点击:

Cross-Platform Objective-C / C++ Development

c++objective-cwindowsmacos

提问by Kezzer

I work in a team of developers, one of us works specifically under Windows, and I work primarily in Mac OS X. We're wanting to develop C-based applications either in C++ or Objective-C however I'm not really knowledgeable in how to go about a cross-platform development project.

我在一个开发团队工作,其中一个专门在 Windows 下工作,我主要在 Mac OS X 上工作。我们想用 C++ 或 Objective-C 开发基于 C 的应用程序,但我不是很了解如何进行跨平台开发项目。

Is it viable to work in C++ using Mac OS X? Obviously they're geared towards Objective-C but is there just as much support for C++. What about cross-platform development in these languages? I'd use something like boost and some kind of UI library.

使用 Mac OS X 在 C++ 中工作是否可行?显然,它们是面向 Objective-C 的,但对 C++ 的支持也一样多。这些语言的跨平台开发怎么样?我会使用类似 boost 和某种 UI 库的东西。

Has anyone got any experience in developing for multiple platforms yet allow applications to run natively without the need for a VM?

有没有人有过为多个平台开发但允许应用程序在不需要 VM 的情况下本地运行的经验?

EDIT: There's a lot of answers I want to mark as correct now. It seems like Qt is the way to go and develop it in C++. Chances are this will be for *nix, OS X and Windows so that would be the best option for us personally. If I can avoid writing Objective-C so the team sticks to C++ then all the better. If I have to write the GUI in Objective-C and mix and match then that's not too much bother either.

编辑:现在有很多答案我想标记为正确。似乎 Qt 是用 C++ 开发它的方法。这可能适用于 *nix、OS X 和 Windows,因此这对我们个人来说将是最佳选择。如果我可以避免编写 Objective-C,以便团队坚持使用 C++,那就更好了。如果我必须在 Objective-C 中编写 GUI 并进行混合和匹配,那也不会太麻烦。

回答by Lyndsey Ferguson

I work for a software company that produces software for Mac OS X and Windows using C++, MFC, and Objective-C.

我在一家软件公司工作,该公司使用 C++、MFC 和 Objective-C 为 Mac OS X 和 Windows 生产软件。

Yes, it is definitely possible.

是的,这绝对是可能的。

You probably will be best served if you develop the "core" of the application in C++. In a MVC application, the C++ part would be the model, and possibly the controllers. For the code that interfaces to the GUI and other OS-specific interfaces, you should use the native APIs: Objective-C on Mac OS X and C# on Windows XP.

如果您用 C++ 开发应用程序的“核心”,您可能会得到最好的服务。在 MVC 应用程序中,C++ 部分将是模型,也可能是控制器。对于连接到 GUI 和其他特定于操作系统的接口的代码,您应该使用本机 API:Mac OS X 上的 Objective-C 和 Windows XP 上的 C#。

The good thing about the Mac is that you can compile C++ and Objective-C together. You can even have Objective-C++ where C++ and Objective-C are compiled in the same compilation unit. Unfortunately you cannot do this with C# (there is something called Managed C++ which is a different beast).

Mac 的好处是你可以一起编译 C++ 和 Objective-C。您甚至可以使用 Objective-C++,其中 C++ 和 Objective-C 在同一编译单元中编译。不幸的是,你不能用 C# 做到这一点(有一种叫做 Managed C++ 的东西,它是一种不同的野兽)。

I would avoid cross-platform frameworks such as Qt and wxWidgets. They both allow you to develop cross-platform applications, but the look and feel of such applications is sub-par. I have more familiarity with wxWidgets though, its design is heavily geared towards the Windows MFC paradigm of application design.

我会避免使用跨平台框架,例如 Qt 和 wxWidgets。它们都允许您开发跨平台应用程序,但此类应用程序的外观和感觉都低于标准。虽然我更熟悉 wxWidgets,但它的设计非常适合 Windows MFC 应用程序设计范式。

Edit May 14, 2009, 9:44 AM EST:If Qt now allows truelook and feel of the native platform, it could be a good option. I haven't looked at the latest offering so you may want to look at that framework before designing your own. That decision should be made after examining the results of the applications and how comfortable you are with the design paradigms that Qt requires.

编辑 2009 年 5 月 14 日,美国东部标准时间上午 9:44:如果 Qt 现在允许原生平台的真实外观和感觉,它可能是一个不错的选择。我没有看过最新的产品,所以你可能想在设计自己的框架之前先看看那个框架。该决定应该在检查应用程序的结果以及您对 Qt 所需的设计范式是否满意之后做出。

回答by itsmatt

You could look at Qt. I've used it successfully on Windows, Linux and Mac OSX projects.

你可以看看 Qt。我已经在 Windows、Linux 和 Mac OSX 项目中成功使用了它。

回答by Pablo Santa Cruz

what I use, is have a common library written in C or C++ with all the core functionality of your application.

我使用的是有一个用 C 或 C++ 编写的公共库,其中包含应用程序的所有核心功能。

Let's say you are building a solitaire game. So you will have core classes in a pure C++ (mostly platform independent) library.

假设您正在构建一个纸牌游戏。因此,您将在纯 C++(主要是平台独立的)库中拥有核心类。

  • CoreSolitaire
  • 核心纸牌

Then, you will have separate UI projects, one for each platform you want to deploy your solitaire on:

然后,您将拥有单独的 UI 项目,针对要在其上部署纸牌的每个平台一个:

  • iSolitaire (Objective-C, MultiTouch Cocoa Based for iPhoneOS)
  • MacSolitaire (Objective-C, Cocoa Based for Mac OS X)
  • WinSolitaire (C++, Win32 or C# Based for Windows plaforms)
  • GSolitaire (C++, GNome/GTK based for linux/unix)
  • iSolitaire(Objective-C,基于 iPhoneOS 的 MultiTouch Cocoa)
  • MacSolitaire(Objective-C,Mac OS X 基于 Cocoa)
  • WinSolitaire(基于 C++、Win32 或 C#,用于 Windows 平台)
  • GSolitaire (C++, GNome/GTK based for linux/unix)

It's more work, but, in my opinion, the resulting product is definitely better than one you could get by using a platform independent widget set like QTor wxWidgets.

这是更多的工作,但是,在我看来,最终的产品肯定比使用像QTwxWidgets这样的平台无关小部件集所能获得的产品更好。

Having said this, if you are going to deploy your product internally in a company where you have full control of the deployment environment, and you don't care that much about how the resulting product will behave on different platforms, you could definitely use a common API for everything (QT, wxWidgets, or any other you might encounter).

话虽如此,如果您打算在一家完全控制部署环境的公司内部部署您的产品,并且您不太关心生成的产品在不同平台上的表现,那么您绝对可以使用所有东西的通用 API(QT、wxWidgets 或任何其他您可能遇到的)。

回答by Hejazzman

Is it viable to work in C++ using Mac OS X? Obviously they're geared towards Objective-C but is there just as much support for C++.

使用 Mac OS X 在 C++ 中工作是否可行?显然,它们是面向 Objective-C 的,但对 C++ 的支持也一样多。

Yes, there is.

就在这里。

You can do pretty much anything you want with C++ in OS X --anything that you could do with C++ on Linux, for example. There is support for the gcc's C++ compiler, c++ libraries, et all. Xcode provides support for working with C++.

你几乎可以在 OS X 中用 C++ 做任何你想做的事情——例如,你可以在 Linux 上用 C++ 做的任何事情。支持 gcc 的 C++ 编译器、C++ 库等。Xcode 为使用 C++ 提供支持。

You can even mix c++ with objective-C with Objective-C++ (Note, however, that this is not portable for GUI work).

您甚至可以将 C++ 与 Objective-C 与 Objective-C++ 混合使用(但是请注意,这对于 GUI 工作来说是不可移植的)。

What about cross-platform development in these languages? I'd use something like boost and some kind of UI library.

这些语言的跨平台开发怎么样?我会使用类似 boost 和某种 UI 库的东西。

I believe that your best bet is QT.

我相信你最好的选择是QT

It is a stable C++ library that is cross-platform (Windows, OSX, Linux and more), has been around for over a decade, is well supported, with many commercial apps written in it (Skype, Adobe Photoshop Album) and a ton of open source stuff written with it (the KDE desktop for starters). Besides GUI stuff it provides a whole lot more (container classes, xml, database connectivity, etc).

它是一个稳定的 C++ 库,跨平台(Windows、OSX、Linux 等),已经存在了十多年,得到了很好的支持,有许多用它编写的商业应用程序(Skype、Adobe Photoshop Album)和大量用它编写的开源内容(初学者的 KDE 桌面)。除了 GUI 之外,它还提供了更多(容器类、xml、数据库连接等)。

You can develop both Open Source and proprietary (closed source) apps for free with the latest QT, and the library was recently bought by NOKIA, a huge multinational, so it isn't going away any time soon.

您可以使用最新的 QT 免费开发开源和专有(闭源)应用程序,该库最近被一家大型跨国公司诺基亚收购,因此它不会很快消失。

Besides the library, QT also comes with an IDE and a Visual Forms Designer (all for free).

除了库之外,QT 还带有一个 IDE 和一个可视化表单设计器(全部免费)。

Other cross-platform GUI libraries for C++ also exist for OS X (wxWidgets, gtkmm, et al).

其他用于 C++ 的跨平台 GUI 库也适用于 OS X(wxWidgetsgtkmm等)。

回答by Kevin

Has anyone got any experience in developing for multiple platforms yet allow applications to run natively without the need for a VM?

有没有人有过为多个平台开发但允许应用程序在不需要 VM 的情况下本地运行的经验?

Slightly. Make sure that you wrap around all the platform specific code. That way you're main application or library doesn't need to reference the platform specific code. That should make it alot easier when porting to another platform.

轻微地。确保您包装了所有平台特定的代码。这样你的主应用程序或库就不需要引用平台特定的代码。当移植到另一个平台时,这应该会更容易。