2010-12-16 56 views
2

我刚刚学习C++并开始使用不同的库,如Boost和SDL。在第一次尝试配置路径之后,现在一切都看起来很好,但我仍然对为什么不同的库有不同的工作有些疑问。C++库(名称空间,链接)之间的区别

  1. 为什么,虽然很多库(比如升压)在其命名空间是分开的,还有其他的(如SDL)是不是?对我而言,将所有内容保持分开更合理,因为一个库无法知道其他库中使用了哪些函数。但是为什么SDL不是这样?

  2. 为什么我必须为几乎每个库手动设置链接器设置(.lib文件),而对于其他(如Boost)自动?是否因为我使用了BoostPro安装程序以某种方式使链接搜索自动执行?还是有其他的设置,我错过了什么?是否可以自动为其他库查找.lib文件?

回答

10
  1. SDL was written in C,而C语言本身并不支持命名空间。 Boost is a C++-only library,并充分利用了C++命名空间。

  2. Boost是一个大部分仅包含头标的库,因此大部分时间都没有实际的二进制文件链接。当有二进制文件需要链接时(比如Boost.Thread),这些头文件可能会利用特定于编译器的指令,这些指令可以命令链接器链接到某些库(如VC++的#pragma comment(lib, ...))。此功能在Boost环境中称为“自动链接”。否则,库必须特别提及链接器。

2
  1. 技术上,SDL是一个C库。由于C没有名称空间,因此SDL不使用它们。 C++(大部分)向后兼容C的事实意味着您可以在C++中使用SDL。另外,SDL使用命名空间的C“等效”:它的所有功能都以SDL开头,有效地创建某种名称空间。

  2. AFAIK,大多数增强“库”不需要链接,因为它们只是标题。虽然我可能是错的。

+0

某些Boost库不是仅包含标头的,文档告诉您哪个库。根据Windows上的@In silico答案,链接自动化。 – 2010-12-16 16:22:21

相关问题