C ++库之间的差异(名称空间,链接)

时间:2010-12-16 16:11:39

标签: c++ visual-studio boost sdl

我只是学习C ++并开始使用不同的库,比如Boost和SDL。在第一次努力配置路径之后,现在一切似乎都很好,但我仍然有一些问题,为什么不同的库工作方式不同。

  1. 为什么许多库(如Boost)在命名空间中被分开,还有其他(如SDL)不是?对我来说,将所有内容分开是更有意义的,因为一个库无法知道其他库中使用了哪些函数。但那为什么SDL不喜欢这个呢?

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

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

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

  2. AFAIK,大多数提升“库”不需要链接,因为它们只是标题。不过我可能错了。