4

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

我想从社区中知道,您会参考使用哪种类型的库,以及您之前是否有过这种类型的多平台编程的经验。

4

8 回答 8

16

使用QtBOOST C++ 库。它们都是免费的,而且质量很高。另外,至少对我个人而言,我发现 Qt 比 wxWidgets 更直接、更容易学习和更简单。

于 2009-07-31T04:55:06.893 回答
4

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

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

并行编程

数值算法

高性能文件 I/O

可视化

于 2009-07-31T04:36:39.317 回答
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++ 以替换运行速度过慢的任何组件。

于 2009-07-31T04:55:30.340 回答
2

您没有指定任何特定类型的库,但如果您只是想要一个一般性推荐,我不得不说 wxWidgets 是一个出色的跨平台 GUI 库。

它有一些很棒的特性,比如以运行它的操作系统的本机外观和感觉来渲染 GUI,而且学习起来并不特别难。它为跨 Win/Mac/Linux 以及其他诸如 WinCE 的 GUI 编写提供了单一 API。

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

查看http://www.wxwidgets.org/

于 2009-07-31T04:40:07.017 回答
2

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

于 2009-07-31T04:47:50.120 回答
1

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

于 2009-07-31T05:11:08.373 回答
1

标准的 C++ 程序可以编译并且可移植,即可以在大范围的平台上工作。为了确保您保持代码干净,最好的办法是使用一些不同的编译器并使用所有这些编译器检查您的代码,同时强制完全符合标准(例如-std=使用 for等选项g++)并编写无警告代码(使用诸如-W -Wall -Werrorfor之类的选项g++,它会发出错误而不是警告)。编译器的确切选择取决于您,但如果您主要是在学习,我建议您使用:

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

此外,如果您确实必须在项目中使用特定于编译器或目标的代码,请务必将其抽象化,以便将其全部集中在一个地方,并对其余代码隐藏。

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

于 2009-07-31T14:19:24.767 回答
1

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

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

于 2009-07-31T06:22:45.063 回答