【发布时间】:2009-07-31 04:32:55
【问题描述】:
我想学习 C++ 以在各种平台(主要是 Linux 和 Windows)上工作。我遇到过一些解决方案,例如 Boost C++ 库、Qt 工具包等,它们可用于编写可在两个平台上编译的程序。
我想从社区中知道,您会参考使用哪种类型的库,以及您之前是否有过这种类型的多平台编程的经验。
【问题讨论】:
标签: c++ api multiplatform
我想学习 C++ 以在各种平台(主要是 Linux 和 Windows)上工作。我遇到过一些解决方案,例如 Boost C++ 库、Qt 工具包等,它们可用于编写可在两个平台上编译的程序。
我想从社区中知道,您会参考使用哪种类型的库,以及您之前是否有过这种类型的多平台编程的经验。
【问题讨论】:
标签: c++ api multiplatform
使用Qt 和BOOST C++ Libraries。它们都是免费的,而且质量很高。另外,至少对我个人而言,我发现 Qt 比 wxWidgets 更直接、更容易学习和更简单。
【讨论】:
您没有指定任何特定类型的库,但如果您只是想要一个一般性推荐,我不得不说 wxWidgets 是一个出色的跨平台 GUI 库。
它有一些很棒的功能,例如以运行它的操作系统的本机外观呈现 GUI,而且学习起来并不难。它为跨 Win/Mac/Linux 以及 WinCE 等其他工具的 GUI 编写提供了单一 API。
我强烈推荐它用于跨平台 GUI 工作。
【讨论】:
如果您正在做任何类型的 GUI 工作,我强烈推荐 Qt;如果你不是,它甚至会非常有用,因为它也有经过深思熟虑的网络/数据库/容器/等 API。这是一个设计精良的 API,非常易于使用。
【讨论】:
核心 C++ 标准和 STL 几乎已经是跨平台的了。它通常只是需要库的 GUI 和硬件访问的东西。
我使用 GTK+ 作为 GUI 工具包,它也很不错,虽然你需要在 windows 上安装 glib 和其他一些东西。
RtAudio 非常适合跨平台音频 I/O。
windows 和 linux 之间的低级网络/套接字内容基本相同,您可以自己编写一个非常轻量级的层来处理任何差异。我对高级网络库没有任何经验。
我也喜欢用于跨平台 2d 图形类型内容的 SFML(简单快速媒体库)。确实很不错。
不过,我建议,如果您只是学习 c++,那么您最好不查看 Boost(或者实际上是这些工具包中的任何一个),直到您已经掌握了基础知识 - 例如,通过编写几个基本的控制台应用程序。
如果您只想学习 c++ 以便进行多平台开发,请注意还有许多其他语言和相关工具包可能更适合,具体取决于您的应用程序写作。
在不知道您计划开发的应用程序类型的情况下,很难说 C++(或 C 或 Python 或其他)是否是最好的主意。就个人而言,对于跨平台 GUI 应用程序,我通常使用 Python + PyGTK,而对于纯 Windows 应用程序,我会使用 C#。您可以随时插入 C/C++ 来替换运行速度过慢的任何组件。
【讨论】:
就像其他发帖人提到的那样,我会推荐 Qt 和 Boost 进行跨平台开发。我曾尝试过 gtkmm,它是一个围绕 GTK+ 的精简 C++ 包装器,但对它并不满意,部分原因是它不是原生 C++ 库,而且与 Qt 相比,它的文档很差。除此之外,Qt 带有非常好的开发环境,包括一个易于编写的 make 替代 qmake 和一个 gui 设计器。
【讨论】:
标准 C++ 程序可以编译并具有可移植性,即可以跨多种平台工作。为了确保您保持代码干净,最好的办法是使用几个不同的编译器并使用所有这些编译器检查您的代码,同时强制完全符合标准(例如,使用-std= 和g++ 之类的选项)和编写无警告代码(使用诸如g++ 的-W -Wall -Werror 之类的选项,它发出错误而不是警告)。编译器的确切选择取决于您,但如果您主要是在学习,我建议您使用:
g++(免费、开源)此外,如果您确实必须在项目中使用编译器或目标特定的代码,请务必将其抽象化,以便将其全部集中在一个地方,并对您的其余代码隐藏。
现在,如果您想使用的不仅仅是 STL,那么您需要通过考虑它们所针对的编译器和平台的范围来选择您的库(而且,如果文档没有说明,那就太糟糕了预兆)。详细的选择取决于您到底想做什么,但 Boost(作为一个强大的、广泛的库,可解决许多常见问题)和 Qt(最新版本;用于 GUI 编程)是不错的选择。对于数值、科学编程,BLAS/LAPACK(和/或它们的并行版本,BLACS 和 Scalapack)被非常广泛地使用,直接或通过包装 C++ 类可以在 Boost(对于 BLAS)中找到;通常还需要一个好的 FFT 库(如果 GPL 许可对您来说不是负担,那么 FFTW 很好)。
【讨论】: