gpt4 book ai didi

c++ - Boost 是什么意思 "header-only libraries"和 "automatic linking"?

转载 作者:IT老高 更新时间:2023-10-28 22:27:55 30 4
gpt4 key购买 nike

Boost library documentation页面,有两个类别分别名为“Header Only Libraries”和“Automatic Linking”。

我想“仅标题库” 意味着您不必链接到 Boost库才能使用它们,“自动链接”意味着你必须链接。

但是当我使用 Boost.Timer 时,我必须链接一个名为 timer 的静态或动态库(libboost_timer.a >libboost_timer.so.1.48.0 和 Linux 库路径下的各种软链接(soft link)),这显然是 Boost.Timer 的确切库文件。我什至需要链接 Boost.SystemBoost.Chrono,虽然库本身使用了一些其他需要链接的库是可以理解的。

另一方面,Boost 已经明确表示 Boost.Asio 属于 "Automatic Linking",但是没有任何类似 的库文件>asio.

那么,“仅 header 库”或“自动链接”究竟意味着什么?还是纯粹是个错误?

最佳答案

正如您所说,“仅头库”意味着整个库都在头文件中,因此一个(或多个)#include使用它就足够了。不需要链接。

“自动链接”意味着,虽然库需要一些链接(直接或作为依赖项),但您不需要在编译器行中指定它,因为 #include如果编译器支持,'d 文件会自动引入适当的库。

例如,在 MSVC编译器,他们使用 #pragman comment(lib, "...") ;在 Borland 编译器中,他们使用 #pragma defineoptions ;等

最值得注意的是,GNU 编译器支持“自动链接”。

自动链接有时会很麻烦(例如,混合调试和发布版本),您可以通过定义一些预处理器宏来选择性地禁用它们:BOOST_<libname>_NO_LIB .在这种情况下,您将不得不手动进行链接。

更新:关于您的评论如下:

Boost.Timer claims to be a "Header only library" but it has lib files in the lib directory.

Boost documentation 中似乎有错误.实际上有两个名为 timer 的不同库:旧的、已弃用的、仅 header 的 <boost/timer.hpp> 和新的、改进的、更酷的、可自动链接的 <boost/timer/timer.hpp> .

但由于某种原因,主文档页面列出了旧版本的属性。

There's no Boost.Asio lib files.

在主 Boost 库文档页面中 library documentation page ,您可以看到 Asio 被列为 Automatic linking due to dependency。列出了具体的依赖关系elsewhere : Boost.System 和 Boost.Regex,并且都提供自动链接。

关于c++ - Boost 是什么意思 "header-only libraries"和 "automatic linking"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769667/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com