学习和跨平台开发(C ++)

时间:2009-10-13 04:31:34

标签: c++ cross-platform

我正在编写一个小型C ++程序,用于娱乐和扩展我的C ++技能。由于其范围相对较小,我还计划通过使该程序支持Windows和Linux来尝试跨平台开发。

我认为我的C ++熟练程度介于休闲和中级之间:OO,一些模板和设计模式,之前使用STL并试图更详细地研究它......但是,在编写这个小程序时我发现越深入挖掘C ++,我就越痛苦,特别是当我开始理解和处理不同平台/供应商实现之间的差异时。

使用像Qt,ACE,Boost这样的跨平台框架似乎有助于加快开发速度,从而使生活更轻松,但我担心这是否会超出我的目的。如果有任何进行C ++跨平台开发的“最佳实践”,有人可以给出一些建议吗?感谢。

10 个答案:

答案 0 :(得分:16)

  

如果有任何进行C ++跨平台开发的“最佳实践”,有人可以给出一些建议吗?

有三件事:

  1. 编写您自己的代码,以便它可以移植

  2. 在抽象/绝缘/实用程序层后面包装特定于平台的API

  3. 选择跨平台库

  4. 您可以选择选项#2和/或#3。

    #3优于#2的优点往往是“它已经被编写,调试和支持”;而且缺点是,“我必须学习它,我可能要付出代价,我不一定能自己支持它,它可能不会完全符合我的要求。”

    开发人员通常更喜欢选项#3而不是#2,特别是如果它是免费的开源(你引用的所有三个库都是)。

答案 1 :(得分:13)

http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/

应该为已经给出的答案提供更多细节。

另外,我建议使用现有的库来抽象字节序,数据类型大小和差异。在开始跨平台项目之前,应考虑以下事项。

<强> GUI

  1. Qt
  2. XVT
  3. wxWidgets
  4. 一般图书馆/框架

    1. STL (Incorporated in most platform libraries already)
    2. Boost
    3. 游戏开发

      1. SDL
      2. Cocos2d-x

答案 2 :(得分:3)

使用gcc。它可以在Windows和Linux上使用,并且两个平台上的库和语言语法都是相同的。

对于跨平台GUI应用程序,Qt是个好主意。如果您试图实现平台独立性,那么就不会对GUI框架产生依赖。

答案 3 :(得分:2)

除非你正在做GUI,否则跨平台不是一个大问题。

文件系统有一些小问题(不同的\ \分隔符,文件名中允许的字符等),但这些问题都在应用程序级而不是c ++。

使主要应用程序变得更加复杂,您需要以跨平台的方式处理帮助,文件位置以及可能的安全性和用户信息。对于简单的算法类型编程,没有问题。

Qt主要是一个GUI库,虽然它有额外的跨平台文件系统的东西。 STL,Boost,ACE是跨平台的,但这不是主要观点。

答案 4 :(得分:2)

使用它们!认真。您想要使用它们的唯一原因是您计划在他们不可用的环境中工作。但是,鉴于它们的跨平台性质,这是不可能的。

你会发现使用它们带来的好处是巨大的,即使它们不是跨平台的。您所说的“最佳实践”是尽可能快速,轻松地提供您的“产品”。

我曾经回答过一个问题,他说他不想在Xlib以上的级别使用GUI库。如果他真的曾经使用过Xlib,他就会知道当被迫在如此低的抽象级别编码时我们都会感受到的痛苦。这与想要在汇编程序中编码一样有意义,因为C / C ++?Python / Perl / everthting-else只是一个更高级别的abstarction。

答案 5 :(得分:2)

这个答案真的很好,你可以列出一个列表,找到起点。但我认为您应该阅读一些关于“移植应用程序”的文章。与跨平台开发无关,但这可以为您提供跨平台开发的非常大的视角。在跨平台开发中,一个更重要的导入是内存问题,如“endian”(字节顺序 - 字节顺序可以显示技术或平台的差异)

答案 6 :(得分:2)

使用提升。他们为您处理跨平台的事情。

boost::filesystem是一个很好的例子

答案 7 :(得分:1)

我认为您可以从使用ACE或等效库中学到很多东西。它们将提高您对c ++和设计模式的理解。我认为这是提高编码技能的最佳方法。

答案 8 :(得分:1)

如果您真的对将代码设置为跨平台感兴趣,请使用尽可能多的编译器。如果您使用的是Windows和Linux,请至少使用VC和gcc。这将确保您不使用编译器特定功能,并且不依赖于系统特定的行为。如果您有权访问它们,请使用更多编译器(英特尔,IBM等)和操作系统(OS X,Solaris)。

答案 9 :(得分:0)

您可以尝试使用U ++&gt; http://www.ultimatepp.org/index.html