linux 下编译boost

本文详细介绍了Boost 1.51版本的安装过程,并解决了安装中遇到的问题。同时,提供了如何下载并使用Boost ThreadPool的步骤,包括源码测试示例及解决编译运行时出现的错误。

安装boost:我选择的是boost1.51版本。

1.下载boost源码,http://sourceforge.net/projects/boost/files/boost/1.51.0/

2.我下载的zip,下载完毕,解压zip,获得boost源码。

3.源码的根目录:

  ./bootstrap.sh    (默认安装到/usr/local/include和/usr/local/lib)

   sudo ./b2 install

4.如果安装后,你看到有fail的情况,请安装二个软件包:

  "安装过程中提示: patchlevel.h:没有那个文件或目录",解决:sudo apt-get install python-dev

  "bzlib.h:没有那个文件或目录",解决:sudo apt-get install libbz2-dev

5.下载boost threadpool:

    http://prdownloads.sourceforge.net/threadpool/threadpool-0_2_5-src.zip?download

6.threadpool解压后,搞个源码测试一下:

  源码的内容为:

  1. #include <iostream>  
  2. #include "threadpool.hpp"  
  3.   
  4. using namespace std;  
  5. using boost::threadpool::pool;  
  6.   
  7. // Some example tasks  
  8. void first_task()  
  9. {  
  10.     cout << "first task is running\n" ;  
  11. }  
  12.   
  13. void second_task()  
  14. {  
  15.     cout << "second task is running\n" ;  
  16. }  
  17.   
  18. void task_with_parameter(int value)  
  19. {  
  20.     cout << "task_with_parameter(" << value << ")\n";  
  21. }  
  22.   
  23. int main(int argc,char *argv[])  
  24. {  
  25.     // Create fifo thread pool container with two threads.  
  26.     pool tp(2);  
  27.   
  28.     // Add some tasks to the pool.  
  29.     tp.schedule(&first_task);  
  30.     tp.schedule(&second_task);   
  31.     tp.schedule(boost::bind(task_with_parameter, 4));  
  32.   
  33.     // Wait until all tasks are finished.  
  34.     tp.wait();  
  35.   
  36.     // Now all tasks are finished!      
  37.     return(0);  
  38. }  
保存为test.cc。

7.将threadpool-0_2_5-src/threadpool/boost下的一个文件夹和头文件拷贝到test.cc目录。

8.然后就可以编译:

   g++ test.cc -lboost_thread

   发现TIME_UTC没有定义。这个问题来源于,boot1.51这个版本,将"TIME_UTC"改为了"TIME_UTC_",一个脑惨的改动。去threadpool里面报错的文件,把这个宏定义改成后者就好了。

9.编译通过,生成a.out可执行文件。

10.运行a.out,会报错,error while loading shared libraries: libboost_thread.so.1.51.0: cannot open shared object file: No such file or directory

11.加上一句:

sudo ldconfig /usr/local/lib

12.再执行程序,OK。


### 如何在 Linux 环境下使用 CMake 编译 Boost 库 要在 Linux 下通过 CMake 使用 Boost 库,可以按照以下方法操作。以下是详细的说明: #### 安装 Boost 库 如果尚未安装 Boost,则可以通过包管理器快速安装预编译版本的 Boost 库: ```bash sudo apt-get update && sudo apt-get install libboost-all-dev -y ``` 这一步适用于 Ubuntu 或 Debian 类系统[^1]。 对于特定版本的需求(如 1.66.0),可以选择从源码编译 Boost 库[^2]。具体过程包括下载源码、配置构建选项以及完成编译和安装。 --- #### 创建项目结构 创建一个新的目录作为项目的根目录,并初始化必要的文件结构。例如: ``` my_project/ ├── CMakeLists.txt └── main.cpp ``` `main.cpp` 是一个简单的测试程序,用于验证 Boost 的功能是否正常加载。示例代码如下: ```cpp #include <iostream> #include <boost/filesystem.hpp> int main() { namespace fs = boost::filesystem; std::cout << "Current path is: " << fs::current_path() << std::endl; return 0; } ``` --- #### 配置 `CMakeLists.txt` 为了使 CMake 能够找到并链接 Boost 库,在 `CMakeLists.txt` 中需加入相应的命令来定位所需的组件。下面是一个完整的例子: ```cmake cmake_minimum_required(VERSION 3.10) project(MyBoostProject LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Boost REQUIRED COMPONENTS system filesystem) if (Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) add_executable(HelloWorld main.cpp) target_link_libraries(HelloWorld PRIVATE ${Boost_LIBRARIES} Boost::system Boost::filesystem) endif() ``` 上述脚本完成了以下几个任务: - 设置最低支持的 CMake 版本为 3.10; - 声明项目名称及其使用的编程语言; - 请求至少 C++17 标准的支持; - 查找指定的 Boost 组件 (`system`, `filesystem`) 并确认其存在性[^3]; - 如果找到了 Boost 则继续定义目标可执行文件并将它与所需库关联起来[^4]。 --- #### 构建与运行 进入项目所在路径后依次执行下列命令以生成 Makefile 和最终的应用程序二进制文件: ```bash mkdir build && cd build cmake .. make ./HelloWorld ``` 成功的话应该会看到当前工作目录被打印出来,证明 Boost 功能调用无误。 --- #### 注意事项 当遇到找不到某些头文件或者静态/动态库的情况时,请检查环境变量 PATH 及 LD_LIBRARY_PATH 是否正确指向了 Boost 所处位置;另外也可以尝试重新设置 BOOST_ROOT 来帮助 CMake 更精确地探测到依赖项的位置。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值