设为首页 加入收藏

TOP

C++与Python混合编程:Boost.Python的安装与使用(一)
2019-02-28 00:08:33 】 浏览:364
Tags:Python 混合 编程 Boost.Python 安装 使用

Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。
Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。但Boost中也有很多是实验性质的东西,在实际的开发中使用需要谨慎。
Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。


Boost 库的安装
方式一:Boost 源码包
首先去 Boost 官网下载 Boost 库:下载地址
官方默认只提供 Boost 的源码包。大多数情况下(纯 C/C++ 开发),源码包就足够了,我们只需要在编译的时候引入相应的头文件即可。但如果你的程序需要以静态/动态链接库的形式引入某些包,就需要自己编译了。恰好 Boost.python 就是这样的需求,毕竟,你总不能指望直接在 python 代码中引用 C++ 源码吧!
我们一般会把 python 代码之外的所有 C/C++ 外挂编译成一个 .pyd 文件,这样就能直接在 python 代码中调用了。事实上,.pyd 文件就是一个拥有 python 接口的 .dll 文件。
Boost 源码包的目录结构如下:
boost_1_68_0
+---boost
+---doc
+---libs
+---more
+---status
+---tools
+---INSTALL
+---Jamroot
+---LICENSE_1_0.txt
+---boost.css
+---boost.png
+---boost-build.jam
+---boostcpp.jam
+---bootstrap.bat
+---bootstrap.sh
+---index.htm
+---index.html
+---rst.css


其中,boost 目录下是所有库的头文件(.hpp文件),libs 目录下则是所有库的具体实现(.cpp文件)。


方式二:Boost 预编译包
Boost 源码包如果要在本地完全编译,可能需要几个小时的时间。因此,为了方便使用,Boost 也推出了 Windows 下的 预编译版本。预编译包比起源码包多出一个子目录,用于存放已经编译好的静态库和动态库。


安装预编译版本 boost_1_68_0-msvc-14.0-32.exe 之后的目录结构如下:


boost_1_68_0
+---boost
+---doc
+---libs
+---lib32-msvc-14.0      # new
+---more
+---status
+---tools
+---INSTALL
+---Jamroot
+---LICENSE_1_0.txt
+---b2.exe                # new
+---bjam.exe              # new
+---boost.css
+---boost.png
+---boost-build.jam
+---boostcpp.jam
+---bootstrap.bat
+---bootstrap.log        # new
+---bootstrap.sh
+---index.htm
+---index.html
+---project-config.jam    # new
+---rst.css


其中,lib32-msvc-14.0 目录保存了所有编译好的静态库和动态库。需要注意的是,预编译版本对编译器种类、版本和目标位数(32/64)都有要求。在上述例子中,要使用这些库,必须用 msvc-14.0(即 Visual Studio 2015)且设置目标位数为 32 位。
不同版本的预编译包可以安装在同一个目录下,以支持不同的编译环境,这样就比较方便了。比如在上述例子中,如果还要支持 64 位,可以再下载一个 boost_1_68_0-msvc-14.0-64.exe,同样安装在当前安装目录下。这样安装目录下将多出一个 lib64-msvc-14.0 子目录,存放编译好的 64 位的库,其余目录和文件均不受影响。
预编译版本满足了偷懒的需求,但很难满足所有要求,因为有些库必须配合本地环境才能使用。比如 Boost.python 就必须配合本地的 Python 版本才能使用,因此本地编译 Boost 库这个基本技能还是必要的。下面我们还是以 Boost 源码包的使用为例进行介绍。
本地编译 Boost.python
在编译之前,需要确保本机已经安装了 Visual Studio 和 Python。
首先,我们使用命令行进入 Boost 源码包的安装目录,执行 bootstrap.bat 脚本,将会在当前目录下生成 b2.exe、bjam.exe、project-config.jam、bootstrap.log 四个文件。其中,b2.exe、bjam.exe 就是我们编译时要用到的命令了。这两个命令的作用是一样的,bjam 是老版本,b2 是升级版本。


下面就可以开始编译 Boost.python 了,笔者在本机所使用的命令如下:
b2.exe --with-python stage --stagedir="./bin/lib32-msvc-14.0" link=static address-model=32


编译完成后,将在 ./bin/lib32-msvc-14.0/lib 目录下产生 4 个文件:
libboost_numpy36-vc140-mt-gd-x32-1_68.lib
libboost_numpy36-vc140-mt-x32-1_68.lib
libboost_python36-vc140-mt-gd-x32-1_68.lib
libboost_python36-vc140-mt-x32-1_68.lib


其中,python 和 numpy 各 2 个,带 gd 的对应 debug 版本,反之对应 release 版本。
默认情况下,编译时调用的编译器和 Python 版本是 b2/bjam 自动搜索的。如果要指定不同的 Python 版本,就需要在你的 home 目录下新建一个配置文件 user-config.jam(路径为 C:\Users\xxx\user-config.jam)。推荐直接使用 Boost 根目录下的 tools/build/example/user-config.jam 作为模板,稍加修改即可。例如,笔者的 user-config.jam 中对 Python 的配置如下:
using python
    : 3.5
    : "D:/App/Python35/python.exe"
    : "D:/App/Python35/include"
    : "D:/App/Python35/libs"
    : <define>BOOST_ALL_NO_LIB=1
    ;


b2/bjam 参数说明:
b2 命

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Maven中dependency和plugins的继.. 下一篇使用Python画一朵美丽的玫瑰花

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目