Boost 和 Boost.Build 的设置

问题

安装编译完 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$ sudo ./bootstrap.sh  # note ,here need sodu, due to worked in /usr/local
/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$ sudo ./bootstrap.sh   # note ,here need sodu, due to worked in /usr/local
/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

 

 3) 对 user-config.jam 做基本设置

/usr/local/boost_1_67_0$ sudo cp ./tools/build/example/user-config.jam .

配置一下 gcc 和 python,

# ------------------
# GCC configuration.
# ------------------

# Configure gcc (default version).
using gcc ;

...

# ---------------------
# Python configuration.
# ---------------------

# Configure specific Python version.
using python : 3.6 : /usr/bin/python3.6 : /usr/include/python3.6 : /usr/lib ;

 

4) 使用 Boost.Python 时,在工程目录下 Jamroot 的一般写法

# Copyright Stefan Seefeld 2016.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

import python ;

if ! [ python.configured ]
{
  ECHO "warning: no Python configured in user-config.jam" ;
  ECHO "warning: will use default configuration" ;
  using python : 3.6 ;
}

# Adjust the following if Boost.Python isn't installed in a default location
#lib boost_python ;
lib python_xlib
    :
    : <name>boost_python36 <search>/usr/local/lib
    ;


project
    #: requirements <library>boost_python # <include>/path/to/boost/python
    : requirements <library>python_xlib <include>/usr/local/include <include>/usr/include/python3.6
    ;

#python-extension fruit_ext
#    : demo_class_wrap.cpp
#    :
#    : <variant>release <variant>debug
#    ;


python-extension dummy_ext
    : demo_class_wrapper.cpp
    : <variant>release <cxxflags>-std=c++11
    ;


#|
#rule run-test ( test-name : sources + )
#{
#    import testing;
#    testing.make-test run-pyd : $(sources) : : $(test-name) ;
#}
#
#run-test hello : hello_ext hello.py ;
#|#
#
#build-project hello ;

 

 (完)

 

posted @ 2018-05-05 12:33  Anonymous596  阅读(3228)  评论(0编辑  收藏  举报