用于多平台开发的C ++ API

时间:2009-07-31 04:32:56

标签: c++ api multiplatform

我想学习C ++以在各种平台(主要是Linux和Windows)上工作。我遇到过一些解决方案,比如Boost C ++库,Qt工具包等,它们可用于编写将在两个平台上编译的程序。

我想从社区了解到,您将使用哪种类型的库,以及您是否有过这种类型的多平台编程经验。

8 个答案:

答案 0 :(得分:16)

使用QtBOOST C++ Libraries。它们都是免费的,质量非常高。此外,至少就我个人而言,我发现Qt比wxWidgets更简单,易学,更简单。

答案 1 :(得分:4)

这取决于你要做什么。如果您需要编写严格的命令行实用程序来处理文本,QtwxWidgets可能不合适。您的申请领域究竟是什么?

科学计算是我的专业领域。其中这些是伟大的多平台API:

并行编程

数值算法

高性能文件I / O

可视化

答案 2 :(得分:2)

您没有指定任何partuclar类型的库,但如果您只是想要一般性建议,我必须说wxWidgets是一个优秀的跨平台GUI库。

它具有一些很棒的功能,例如在运行的操作系统的本机外观中呈现GUI,并且不是特别难学。它为Win / Mac / Linux和其他类似WinCE的GUI编写提供了单一的API。

我强烈推荐它用于跨平台GUI工作。

http://www.wxwidgets.org/

上查看

答案 3 :(得分:2)

如果您正在进行任何类型的GUI工作,我强烈推荐Qt;如果你不这样做,它甚至非常有用,因为它也经过深思熟虑的网络/数据库/容器/等API。它是一个设计良好的API,非常易于使用。

答案 4 :(得分:2)

核心C ++标准和STL已经是相当多的跨平台。它通常只有GUI和硬件访问需要库的东西。

我使用GTK +作为GUI工具包,虽然你需要在windows上安装glib和其他东西,但它也很不错。

RtAudio非常适合跨平台音频I / O.

低级网络/套接字的东西在windows和linux之间基本相同,你可以自己编写一个非常轻量级的层来处理任何差异。我对高级网络库没有任何经验。

我也喜欢用于跨平台2d图形类型的SFML(简单快速媒体库)。这确实非常好。


但是,我建议如果你只是学习c ++ 那么你可能会更好地离开而不是看看Boost(或者确实是这些工具包中的任何一个),直到例如,你可以通过编写几个基本的控制台应用程序来了解基础知识。

如果您只想学习c ++以便做多平台开发,请注意有许多其他语言和相关工具包可能更合适,具体取决于您的应用程序写入。

在不知道您计划开发的应用程序类型的情况下,很难说C ++(或C或Python或其他)是最好的主意。就个人而言,我通常转向Python + PyGTK用于跨平台GUI应用程序和C#用于仅限Windows的应用程序。您始终可以插入C / C ++来替换运行速度太慢的任何组件。

答案 5 :(得分:1)

与其他海报提到的一样,我会推荐Qt和Boost进行跨平台开发。我曾尝试过gtkmm这是一个围绕GTK +的瘦C ++包装器,但是对它不满意,部分原因是因为它不是原生C ++库,而且文档与Qt相比较差。除此之外,Qt还有非常好的开发环境,包括易于编写的替代qmake和gui设计师。

答案 6 :(得分:1)

我将在C ++中进行一些跨平台开发,你不想维护不同的构建系统(Makefile,Visual Studio Projects等),有几种工具可以帮助你。

我个人使用的是CMake。它支持Linux和Unix Flavors,Windows和Mac / OS。实际上有几个开源项目,比如KDE,使用它。但还有其他选项,例如Scons

答案 7 :(得分:1)

标准C ++程序将编译并可移植,即可在多种平台上工作。为了确保您保持代码干净,最好的办法是获得一些不同的编译器并检查所有代码,同时强制执行完全标准的一致性(对-std= g++等选项,例如)并编写无警告代码(-W -Wall -Werror用于g++等选项,它会发出错误而不是警告。编译器的确切选择取决于您,但如果您主要是在学习,我建议使用:

  • g++(免费,开源)
  • 英特尔编译器(在Linux上免费用于非商业用途)
  • 也许是MSVC ++

此外,如果您真的必须在项目中使用编译器或目标特定的代码,请务必对其进行抽象,以便将它们集中在一个地方,并隐藏其余的代码。

现在,如果你想使用超过STL,那么你需要通过考虑他们测试的编译器和平台的范围来选择你的库(并且,如果文档没有说明它,那么它是一个坏的预兆)。详细选择取决于您想要做什么,但Boost(作为许多常见问题的强大,广泛的库)和Qt(最新版本;用于GUI编程)是不错的选择。对于数字,科学编程,BLAS / LAPACK(和/或它们的并行版本,BLACS和Scalapack)被广泛使用,直接或通过包装C ++类,可以在Boost(BLAS)中找到;通常还需要一个好的FFT库(如果它的GPL许可不是你的负担,则FFTW很好)。