【问题标题】:differences between C++ libraries (namespaces, linking)C++ 库之间的差异(命名空间、链接)
【发布时间】:2010-12-16 16:11:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ visual-studio boost sdl


    【解决方案1】:
    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,大多数 boost“库”不需要链接,因为它们只是标题。不过我可能错了。

      【讨论】:

      • 一些 Boost 库不是只有头文件的,文档告诉你哪个。根据@In silico 在 Windows 上的回答,链接是自动化的。
      猜你喜欢
      • 2013-10-01
      • 2011-03-30
      • 2015-05-13
      • 2011-11-27
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 2014-09-25
      相关资源
      最近更新 更多