跨平台开发的C++ API

4

我希望学习C++,以便在各种平台(主要是Linux和Windows)上工作。我发现了一些解决方案,如Boost C++库、Qt工具包等,可以用来编写能够在这两个平台上编译的程序。

我想向社区了解,你们会推荐使用哪种类型的库,如果有人有多平台编程的经验,请分享一下。

8个回答

16

使用 QtBOOST C++ 库。它们都是免费的且非常高质量。并且,至少对我来说,我发现 Qt 比 wxWidgets 更加直观、易于学习和简单。


4
这取决于你要做什么。如果需要编写严格的命令行实用程序来处理文本,则QtwxWidgets可能不合适。你的应用领域是什么?
科学计算是我的专业领域,在其中这些是很好的跨平台API:
并行编程
- MPI - OpenMP 数值算法

高性能文件I/O

可视化


2
您没有指定任何特定类型的库,但如果您只是想要一般建议,我必须说wxWidgets是一个非常优秀的跨平台GUI库。它具有一些很棒的功能,如在运行的操作系统的本地外观和感觉下呈现GUI,并且不是特别难学。它提供了一个用于Win/Mac/Linux等多个平台的GUI编写的单个API,以及其他平台如WinCE。我强烈推荐它用于跨平台GUI开发。请查看http://www.wxwidgets.org/

+1 外观和感觉对于GUI工具包来说非常重要,但经常被忽视。 - Martin York

2

如果你需要进行任何GUI工作,我强烈推荐Qt;即使你不需要GUI,因为它还有经过深思熟虑的网络/数据库/容器等API,也非常有用。它是一个设计非常好的API,非常易于使用。


2
核心的C++标准和STL已经非常跨平台了。通常只有GUI和硬件访问等方面需要使用库。
我用过GTK+作为GUI工具包,它也很不错,不过在Windows上需要安装glib和其他一些东西。
RtAudio适用于跨平台音频I/O。
低级网络/套接字方面在Windows和Linux之间基本相同,您可以编写一个非常轻量级的层来处理任何差异。我没有使用过更高级别的网络库。
我也喜欢SFML(简单快速媒体库)用于跨平台2D图形类型的东西。它确实非常好。
然而,我建议如果您只是学习C ++,那么在掌握基础知识之前最好不要看Boost(或任何这些工具包),例如通过编写一些基本的控制台应用程序。
如果您想学习C ++,只是为了进行多平台开发,请注意,还有许多其他语言和相关工具包可能更合适,具体取决于您要编写的应用程序。
如果不知道您计划开发的应用程序类型,很难说C ++(或C或Python或其他语言)是否是最佳选择。就个人而言,我通常会转向Python + PyGTK用于跨平台GUI应用程序,而对于仅限Windows的应用程序则使用C#。您始终可以插入C / C ++以替换任何运行过慢的组件。

我刚开始学习C++。我的目标是能够编写多平台应用程序。我正在尝试了解有哪些工具可用以及人们如何处理这些事情。谢谢。 - sul4bh

1
就像其他帖子中提到的那样,我建议使用Qt和Boost进行跨平台开发。我曾尝试过gtkmm,它是GTK+的一个薄C++包装器,但并不满意,部分原因是它不是本地的C++库,而且文档与Qt相比较差。此外,Qt还配备了非常好的开发环境,包括易于编写的make替代品qmake和GUI设计工具。

1

如果你要进行一些跨平台的C++开发,并且不想维护不同的构建系统(如Makefiles、Visual Studio Projects等),那么有几种工具可供选择。

我个人使用的是CMake。它支持Linux和Unix平台、Windows和Mac/OS。事实上,很多开源项目,比如KDE,都在使用它。但也有其他选项,比如Scons


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很好)。

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