问题

安装编译完 Boost 后,如果不设置 BOOST_ROOTBOOST_BUILD_PATH 则可能导致使用 bjam 时定位到 Boost 默认的路径 /usr/share/boost-build,而如果此目录下已有系统默认的 Boost 相关安装文件,就会导致 Boost 当前版本和默认安装版本不匹配的错误。

方案

直接修改 .bashrc,加入下述两句即可 (注意,我这里使用的路径是我默认的 boost 编译路径 /usr/local/boost_1_67_0,读者应该根据自己的路径更改)

export BOOST_ROOT=/usr/local/boost_1_67_0
export BOOST_BUILD_PATH=/usr/local/boost_1_67_0

======================================================

注意,以上是迂回的做法,正规的做法如下:

0.1) 安装之前,最好把链接 /usr/bin/python (默认指向 python2.7) 修改为指向 python3 ,安装完再调回去。以后主要使用 python3。 

0.2) 因为 python3 的头文件路径可能为 /usr/include/python3.6m,而 Boost 默认查找的路径为  -I"/usr/include/python3.6",所以需要在 /usr/include/ 下新建一个链接 /usr/include/python3.6,使其指向 /usr/include/python3.6m。

0.3) 对于服务器,要求稳定,可以选择 CentOS。对于个人应用环境,建议使用 Ubuntu,因为 CentOS 软件过于陈旧,编译最新的 BOOST,PyBind11,可能会有一些兼容性问题需要手动调节,比如上述的 0.2) 在 Ubuntu 18.04 下是没有的。

1) Boost 的编译

注:Boost 有些库需要编译成动态链接或静态库文件,才能使用,大多数库都只有头文件,头文件里的函数以模板,内联方式实现,直接包含即可。

如果直接将 Boost 解压缩到 /usr/local/boost_1_67_0,而且编译安装采用默认路径,即没有带设置参数 --prefix=xxx,则 Boost 默认将编译的库文件存放在 /usr/local/lib 下,而头文件存放在 /usr/local/include 下,这样在编译 Boost 相关程序时,如果需要链接库文件,则直接指向 /usr/local/lib 中相应的静态库或动态库即可,而需要的头文件则可以指向 /usr/local/include 或者可以指向原始的 Boost 包解压路径 /usr/local/boost_1_67_0 (也即 BOOST_ROOT)。

用到的编译安装命令如下,(注意,因为要安装在 /usr/local/ 下,所以安装时需要 sudo)

/usr/local/boost_1_67_0$ ./bootstrap.sh
/usr/local/boost_1_67_0$ sudo ./b2 install

2)Boost.Build 的编译

注:Boost.Build 是 Boost 官方工作人员,为了应对 Boost 在各种环境下的编译安装而开发的一套 Build 系统,可以完全独立于 Boost 库运行,支持 C/C++ 工程的 Build  和管理,功能类似于 cmake。

Boost.Build 随 Boost 库发行,也可以单独下载编译安装,此处以 Boost 库附带的 Boost.Build 安装为例,首先进入 /usr/local/boost_1_67_0/tools/build,然后运行命令如下,

/usr/local/boost_1_67_0/tools/build$ ./bootstrap.sh
/usr/local/boost_1_67_0/tools/build$ sudo ./b2 install --prefix=/usr/local/

这样,安装完后,可执行文件 b2 和 bjam (两个完全一样)将在 /usr/local/bin 下,而 Boost.Build 系统文件将在 /usr/local/share/boost-build/ 下。

注意:如果安装之前,系统已经有默认的 Boost 可执行文件 b2 或 bjam 在 /usr/local/bin 下,有默认的 Boost.Build 系统文件在 /usr/local/share/boost-build 下,先将它们删除,再安装当前的新版本即可。

=======================================================

安装完成之后,解决找不到动态链接库的问题

在 /etc/ld.so.conf.d/ 下创建文件 boost_lib.conf (文件名任意),添加 boost lib 路径 /usr/local/lib,然后执行如下命令即可,

$ sudo ldconfig

完。

Boost 和 Boost.Build 的设置的更多相关文章

  1. 【Boost】boost库中timer定时器 2

    博客转载自:http://blog.csdn.net/yockie/article/details/40386145 先跟着boost文档中asio章节的指南中的几个例子学习一下使用: 所有的Asio ...

  2. boost::thread boost库线程

    一.boost::thread的创建 1.线程创建方法一: boost::shared_ptr<boost::thread> writeThread_; boost::function0& ...

  3. 【Boost】boost库asio详解3——io_service作为work pool

    无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE.使用io_service作为处理工作的work pool,可以 ...

  4. 【Boost】boost库asio详解5——resolver与endpoint使用说明

    tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address ...

  5. 初识boost之boost::share_ptr用法

    boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr. 这其中,我最喜欢,使用最多的 ...

  6. boost信号量 boost::interprocess::interprocess_semaphore的用法

    使用方法首先给信号量初始化赋值,可以根据需要设定需要的值,之前在写项目的过程中用这个控制下载的线程个数. boost::interprocess::interprocess_semaphore m_s ...

  7. 【Boost】boost::tokenizer详解

    分类: [C++]--[Boost]2012-12-28 21:42 2343人阅读 评论(0) 收藏 举报   目录(?)[+]   tokenizer 库提供预定义好的四个分词对象, 其中char ...

  8. 【Boost】boost::string_algo详解2——find相关函数

    来自: https://blog.csdn.net/huang_xw/article/details/8276123 函数声明:   template<typename Range1T, typ ...

  9. 【C++】boost::shared_ptr boost::make_shared

    一.shared_ptr shared_ptr作为一个动态分配的对象,当最后一个指向其内容的指针销毁(destroyed)或重置(reset),其指向的内容会被销毁(deleted).不再需要显式调用 ...

随机推荐

  1. 微信小程序调用地图选取位置后返回信息

    先看一下wxml的代码,绑定个事件! <view class='carpool_data_all'> <view class='aa'> <text>*出发地< ...

  2. BZOJ1299: [LLH邀请赛]巧克力棒(Nim游戏)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 552  Solved: 331[Submit][Status][Discuss] Descriptio ...

  3. 使用vmimeNET解析账单邮件

    大概所有做APP的公司都是不愿意做自定义的,哪怕自己的功能再烂也愿意慢慢修补不愿意开源一部分. 卡牛- 51信用卡- 一次次的逾期   自己写个信用卡管理工具,从邮件中提取账单,还款后做个登记,到了还 ...

  4. 如何用ABP框架快速完成项目(5) - 用ABP一个人快速完成项目(1) - 使用代码生成器

    用ABP一个人快速完成项目有如下要点: 站在巨人的肩膀上 - 使用代码生成器 站在巨人的肩膀上 - 使用成熟控件框架, 一个框架不够就上两个, 两个不够就上三个 通过微服务模式而不是盖楼式来避免难度升 ...

  5. writing objects : 值%停住

    在git bush 中使用命令:git config --global http.postBuffer 524288000 因为git上传,限定一次push命令的buffer大小.

  6. Android为TV端助力 关于JNI的使用方法

    1首先在java里面定义你需要的native方法 2打开cmd,进入doc窗口,如果是android项目就进入到你当前项目的bin目录下,在doc里面输入cd E:\workspace\Test1 也 ...

  7. 章节一、1-Selenium简介

    一.Selenium WebDriver介绍 1.跨平台,用web浏览器做自动化的工具. 2.可以在浏览器上运行的一个框架,用来进行界面的自动化. 3.支持多种计算机语言. 4.可以模拟真实的用户去操 ...

  8. (后端)mybatis中使用Java8的日期LocalDate、LocalDateTime

    原文地址:https://blog.csdn.net/weixin_38553453/article/details/75050632 MyBatis的型处理器是属性“createdtime参数映射为 ...

  9. JSON语法与JavaScript语法的区别

    JSON是独立于语言存在的,在不同的编程语言中对这种数据类型的实现不同,例如在JavaScript中使用JavaScript对象对这种数据格式进行实现,那么在java中当然是用java对象实现. 描述 ...

  10. flask based on tornado

    from flask import Flask from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPSe ...