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

hyp*_*not 2 c++ boost sdl visual-studio

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

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

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

In *_*ico 10

  1. SDL是用 C语言编写的,C语言本身不支持名称空间.Boost是一个仅限C++的库,并充分利用了C++命名空间.

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