0%

1_1_理论基础

简介

  • boost库相关的笔记

Boost 库 编译 教程 详解

Boost C++ 库是一个非常强大的 C++ 库,提供了大量的功能和工具,包括智能指针、多线程、正则表达式、容器、图形学等。编译 Boost 库可能会有一些复杂性,因为 Boost 包含了大量的头文件和库,但下面是一个简要的教程,演示如何编译 Boost 库。

步骤 1:下载 Boost 库

首先,您需要下载 Boost 库的源代码。您可以从 Boost 官方网站(https://www.boost.org/)下载最新版本的 Boost 库。将源代码文件解压到您选择的目录中。

步骤 2:打开终端

在终端中导航到 Boost 库的源代码目录。您可以使用 cd 命令切换到该目录。

步骤 3:运行 Bootstrap 脚本

Boost 提供了一个名为 bootstrap.sh(Linux/macOS)或 bootstrap.bat(Windows)的脚本,用于配置编译过程。在终端中运行以下命令:

对于 Linux/macOS:

1
./bootstrap.sh

对于 Windows:

1
bootstrap.bat

这将为您的系统配置 Boost 库的编译过程。

步骤 4:运行 b2 命令

接下来,您需要运行 b2 命令来编译 Boost 库。您可以使用以下命令:

1
./b2

这将默认编译所有 Boost 库的组件。如果您只需要特定的库,您可以在 b2 命令后面添加库名称,例如:

1
./b2 --prefix=/tmp/boost --with-filesystem --with-system

这将仅编译文件系统和系统库。

步骤 5:等待编译完成

编译 Boost 库可能需要一些时间,具体取决于您的系统性能和所选的库。一旦编译完成,您将在 Boost 源代码目录中找到生成的库文件。

步骤 6:安装 Boost 库

您可以选择将编译后的库文件安装到系统目录中,以便其他项目可以轻松使用它们。运行以下命令:

1
sudo ./b2 install

这将把库文件复制到系统的默认位置。

注意:在 Windows 上,您可能需要使用 Visual Studio 编译工具来编译 Boost 库。您可以在 Boost 官方网站上找到有关使用 Visual Studio 的更多信息。

这是一个简要的 Boost 库编译教程。具体的步骤可能因您的系统和需求而有所不同。为了获得更详细的信息和特定于您的平台的说明,请查阅 Boost 文档或参考 Boost 官方网站上的编译指南。

cmake中引用Boost库

  • 通过调用find_package可以找到头文件和所需要的库文件或者是一个CMake打包配置文件

    1
    2
    3
    4
    5
    find_package(Boost
    [version] [EXACT] # 可选项,最小版本或者确切所需版本
    [REQUIRED] # 可选项,如果找不到所需库,报错
    [COMPONENTS <libs>...] # 所需的库名称,比如说. "date_time" 代表 "libboost_date_time"
    )
  • 示例

    1
    2
    find_package(Boost 1.62.0 REQUIRED
    COMPONENTS system filesystem thread)
  • 运行之后可以得到很多变量,下面列了一些主要的:

    1
    2
    3
    4
    5
    6
    Boost_FOUND            - 如果找到了所需的库就设为true
    Boost_INCLUDE_DIRS - Boost头文件搜索路径
    Boost_LIBRARY_DIRS - Boost库的链接路径
    Boost_LIBRARIES - Boost库名,用于链接到目标程序
    Boost_VERSION - 从boost/version.hpp文件获取的版本号
    Boost_LIB_VERSION - 某个库的版本
  • 如果Boost库是自定义安装路径,可以在搜索package之前,通过设置一些变量来帮助boost库查找

    1
    2
    3
    4
    BOOST_ROOT             - 首选的Boost安装路径
    BOOST_INCLUDEDIR - 首选的头文件搜索路径 e.g. <prefix>/include
    BOOST_LIBRARYDIR - 首选的库文件搜索路径 e.g. <prefix>/lib
    Boost_NO_SYSTEM_PATHS - 默认是OFF. 如果开启了,则不会搜索用户指定路径之外的路径
  • 如果目标程序foo需要链接Boost库的regex和system,编写如下的CMakeist文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # CMakeLists.txt
    project(tutorial-0)
    cmake_minimum_required(VERSION 3.7)
    set(CMAKE_CXX_STANDARD 14)

    set(BOOST_ROOT /usr/local/install/boost_1_62_0) // 设置boost库搜索路径
    set(Boost_NO_SYSTEM_PATHS ON) // 只搜索上语句设置的搜索路径

    find_package(Boost COMPONENTS regex system REQUIRED)

    if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})

    MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.")
    MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.")
    MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.")

    add_executable(foo foo.cpp)
    target_link_libraries (foo ${Boost_LIBRARIES})
    endif()
  • 通过设置BOOST_ROOT来设置首选的搜索路径

  • 通过MESSAGE函数把差找的结果都打印出来

  • Boost动态库链接。如果项目包含多个子模块,且子模块只用到顶层模块find_package找到的部分库,则用下述语句实现只链接子模块需要的Boost动态库

    1
    target_link_libraries(foo Boost::regex) // 只使用regex
  • Boost头文件库链接。在Boost库中有部分库只用头文件实现,并没有响应的动态库,若使用这部分库可以通过以下语句实现

    1
    2
    3
    target_link_libraries(foo Boost::boost)
    or
    target_include_directories(${Boost_INCLUDE_DIRS})

Boost C++ 库 使用示例 详解

Boost C++ 库包含了众多功能和组件,因此无法在一篇回答中详尽介绍所有。下面将展示一个使用 Boost 库的示例,涵盖智能指针、正则表达式和文件系统三个常用部分。请确保您已经成功编译了 Boost 库并将其包含在项目中。

1. 智能指针(Smart Pointers)示例:

智能指针帮助管理动态分配的内存,防止内存泄漏。以下是一个使用 Boost 智能指针的示例:

1
2
3
4
5
6
7
8
9
10
11
12
#include <boost/shared_ptr.hpp>
#include <iostream>

int main() {
boost::shared_ptr<int> sharedInt(new int(42));

std::cout << "Shared pointer value: " << *sharedInt << std::endl;
std::cout << "Reference count: " << sharedInt.use_count() << std::endl;

// sharedInt 在离开作用域时会自动释放内存
return 0;
}

在上述示例中,我们使用了 boost::shared_ptr 来创建一个智能指针,它会自动管理整数的内存分配和释放。use_count() 函数用于获取引用计数。

2. 正则表达式示例:

Boost.Regex 提供了强大的正则表达式功能。以下是一个使用 Boost.Regex 的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main() {
std::string text = "Boost Libraries are awesome!";
boost::regex reg("Boost.*awesome");

if (boost::regex_search(text, reg)) {
std::cout << "Match found!" << std::endl;
} else {
std::cout << "No match found." << std::endl;
}

return 0;
}

上述示例中,我们使用 boost::regex 创建了一个正则表达式,然后使用 boost::regex_search 检查字符串中是否包含匹配的文本。

3. 文件系统示例:

Boost 文件系统库提供了文件和目录操作功能。以下是一个使用 Boost 文件系统库的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <boost/filesystem.hpp>
#include <iostream>

int main() {
boost::filesystem::path dirPath("./my_directory");

if (boost::filesystem::exists(dirPath)) {
if (boost::filesystem::is_directory(dirPath)) {
std::cout << "Directory exists." << std::endl;
} else {
std::cout << "Not a directory." << std::endl;
}
} else {
std::cout << "Directory does not exist." << std::endl;
}

return 0;
}

在上述示例中,我们使用 boost::filesystem::path 表示目录路径,并使用 boost::filesystem::existsboost::filesystem::is_directory 函数来检查目录是否存在以及是否为目录。

这些示例涵盖了 Boost C++ 库的一小部分功能。要使用 Boost 的其他组件和功能,请查阅 Boost 官方文档,其中包含了详细的教程和示例代码,以帮助您更好地理解和应用 Boost 库的各个组件。

Boost C++ 库 详解

Boost C++ 库是一个非常受欢迎的开源 C++ 库集合,提供了各种功能和工具,用于增强 C++ 编程,包括数据结构、算法、多线程、正则表达式、智能指针、文件系统操作等。以下是 Boost C++ 库的一些主要组成部分和功能的详细介绍:

  1. 智能指针(Smart Pointers):Boost 提供了各种智能指针,如 shared_ptrunique_ptrweak_ptr,用于管理动态分配的内存,以避免内存泄漏和提高代码安全性。

  2. 容器和数据结构:Boost 包括许多增强的容器和数据结构,如 unordered_mapunordered_setmulti_indexvariantany,用于更有效地管理数据。

  3. 多线程支持:Boost 提供了一套多线程库,包括线程、锁、条件变量和原子操作,以便于编写并发程序。

  4. 正则表达式:Boost.Regex 提供了强大的正则表达式库,使您可以进行高级文本匹配和处理。

  5. 文件系统:Boost 文件系统库允许您进行文件和目录的操作,包括文件检查、复制、移动和删除。

  6. 日期时间和时间戳:Boost.Date_Time 库提供了日期、时间和时间戳处理的功能,可用于处理时间相关的任务。

  7. 图形学库:Boost.Graph 库用于图形算法和数据结构,支持图形遍历、搜索和分析。

  8. 泛型编程和元编程:Boost 具有强大的泛型编程和元编程工具,包括预处理器宏、类型萃取和模板元编程,用于创建通用、高效的代码。

  9. 库之间的交互性:Boost 库之间通常能够很好地协同工作,因此您可以轻松地将它们组合在一起,以满足特定需求。

  10. 跨平台性:Boost 在多种操作系统和编译器上都能正常工作,因此它具有很强的跨平台性。

  11. 社区支持:Boost 是一个由社区驱动的项目,拥有广泛的用户和开发者社区,因此您可以在社区中获得支持和解答问题。

  12. C++标准化贡献:Boost 库中的一些功能已被采纳并成为 C++ 标准库的一部分,如智能指针 (std::shared_ptrstd::unique_ptr) 和正则表达式 (std::regex)。

要使用 Boost 库,通常需要将其源代码包括头文件和库链接到您的项目中。您可以在 Boost 官方网站上找到详细的文档和教程,以帮助您入门和使用 Boost 库的各个组件。Boost 提供了广泛的文档和示例代码,以便您更好地理解和使用这些功能。

感谢老板支持!敬礼(^^ゞ