BOOST源码笔记(1) - boost::call_once

本文详细介绍了boost库中的call_once功能,通过实例展示了如何使用它来确保全局变量的一次初始化。文章揭示了其内部工作原理,利用进程ID和标志创建独一无二的mutex,保证在多线程环境中只执行一次初始化操作。核心代码分析了double-checked locking模式以提高效率。

boost::call_once应用及其实现

 

以下是一个典型的运用call_once实现一次初始化的例子:

 1  #include  < boost / thread / thread.hpp >
 2  #include  < boost / thread / once.hpp >
 3  #include  < iostream >
 4 
 5  int  i  =  
<think>我们遇到了链接错误,提示找不到Boost的三个库:thread, date_time, chrono。 这表明虽然头文件可能已经包含(编译阶段通过),但在链接阶段找不到对应的库文件。 解决方案通常包括:确保安装了对应的Boost库开发包,检查库路径是否在链接器搜索路径中,以及确认库文件名是否正确。 以下是详细的解决步骤: </think> ### 解决Boost链接错误:找不到 -lboost_thread, -lboost_date_time, -lboost_chrono #### 错误原因分析 这些链接错误表明: 1. **Boost库未完全安装**:缺少thread、date_time和chrono组件 2. **库文件路径未配置**:链接器无法找到.so/.a文件 3. **命名规范问题**:库文件命名与项目配置不匹配 4. **多版本冲突**:系统存在多个Boost版本导致混淆 --- #### 完整解决方案 ##### 1. 安装缺失的Boost组件 ```bash # Ubuntu/Debian sudo apt update sudo apt install libboost-thread-dev libboost-date-time-dev libboost-chrono-dev # Fedora/RHEL sudo dnf install boost-thread-devel boost-date-time-devel boost-chrono-devel # Arch/Manjaro sudo pacman -S boost-libs ``` ##### 2. 配置项目链接器路径 ```qmake # 在.pro文件中添加 LIBS += -L/usr/lib/x86_64-linux-gnu \ -lboost_thread \ -lboost_date_time \ -lboost_chrono \ -lpthread # thread库需要pthread支持 # 确保包含Boost头文件 INCLUDEPATH += /usr/include/boost ``` ##### 3. 使用pkg-config自动配置(推荐) ```qmake # 安装pkg-config sudo apt install pkg-config # 在.pro文件中添加 CONFIG += link_pkgconfig PKGCONFIG += boost_thread boost_date_time boost_chrono ``` ##### 4. 验证库文件存在性 ```bash # 检查库文件是否存在 ls /usr/lib/libboost_thread* ls /usr/lib/libboost_date_time* ls /usr/lib/libboost_chrono* # 64位系统检查 ls /usr/lib/x86_64-linux-gnu/libboost_thread* ``` ##### 5. 指定完整库路径(如果必要) ```qmake # 在.pro文件中使用绝对路径 LIBS += /usr/lib/x86_64-linux-gnu/libboost_thread.so \ /usr/lib/x86_64-linux-gnu/libboost_date_time.so \ /usr/lib/x86_64-linux-gnu/libboost_chrono.so ``` --- #### 多版本管理技巧 1. 使用符号链接指定默认版本: ```bash sudo ln -s /usr/lib/libboost_thread.so.1.74.0 /usr/lib/libboost_thread.so ``` 2. 在CMake中指定版本: ```cmake find_package(Boost 1.65 REQUIRED COMPONENTS thread date_time chrono) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值