boost.python简介
boost库是一个可移植、开源的c++库,它是由c++标准委员会库工作成员发起、维护。其目的是为c++程序员提供免费、同行审查的、可移植的程序库。boost库可以与c++标准库完美共同工作,并且为其提供扩展功能。boost由于其对跨平台的强调,对标准c++的强调,与编程平台无关。大部分boost库功能的使用只需要包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。
boost 库是为c++语言标准库提供扩展的一些c++程序库的总称。而boost.python库是boost库的其中的一个子库,使用它可以轻松地将c++的函数接口转换成python接口。在大部分情况下你不需要对原先的c++代码做任何的修改,boost.python会对c++类再做一层封装,使它编译后符合python的语言规范。
boost.python 安装配置
安装环境准备(包)
windows系统:windows11-64bit python:3.12.2 gcc:gcc(gcc-mingw)11.5.0 cmake:version-3.23.2 msvc(visual studio):14.3(2022版),14.2(2.19版) boost.python:1.89.0(exe包-预编译版本) ==boost.python下载地址:== 1)https://sourceforge.net/projects/boost/ 2)https://www.boost.org/releases/latest/
注意:以上包程序请按照顺序安装,否则会安装失败
一、boost.python安装
1、进入官网下载安装包
打开官网地址,下载预编译包boost_1_89_0-msvc-14.3-64.exe:

下载完成后点击打开,进入安装页面。开始会让你选择安装位置,未特殊要求默认即可,一直next:

安装完成后,打开终端,进入到boost.python安装目录下,运行bootstrap.bat文件:
命令:.\bootstrap.bat


执行结束后,会在当前目录下生成b2.exe文件。

2、创建user-config.jam文件
在进行boost的编译以前我们需要定义python的版本,默认下会自动搜索并使用$path中的路径。如果我们有多个版本的话,就需要指定我们用哪一个。
方法一:在该文件夹下(c:\local\boost_189_0)新建一个user-config.txt文件,并在里面加上:
using msvc : 14.3;
# 路径仅供参考
using python : 3.12
: "c:\users\xxx\appdata\local\programs\python\python312\python.exe"
: "c:\users\xxx\appdata\local\programs\python\python312\include"
: "c:\users\xxx\appdata\local\programs\python\python312\libs";
其中using msvc:14.3指定编译器为msvc 14.3 即 vs 2022,如果是vs 2015 的话应填 using msvc:14.0。using python 则是指定python版本及其路径,因为我用的是anaconda python-3.12.2,所以第一处填3.12,第二处则是anaconda根目录下的python.exe的目录地址。第三四处也都在anaconda根目录下,注意顺序和符号。切记版本号和路径填写自己的。保存user-config.txt文件后并将其后缀改为.jam,即user-config.jam。修改命令使用:ren方法二:进入目录:c:\local\boost_1_89_0\tools\build\example,找到文件:user-config.jam,复制一份到用户的目录下(例如:c:\users\xxx\user-config.jam)即可。注意文件末尾的 python version 要改成当前使用的python版本。我是这两个方法一起用了…

3、编译
以上处理保存后,在当前目录下(c:\local\boost_189_0)编译,命令:
.\b2 --with-python --prefix="d:\boost" install toolset=msvc-14.3 link=static threading=multi address-model=64
编译说明:
boost 库提供了强大的编译工具 b2.exe 和 bjam.exe ,其中 b2.exe 为新版本的编译工具,我们使用它来编译 boost::python 64 位静态库。在 boost_1_69_0 文件夹下打开命令行 ( powershell 等),输入以下命令回车即可。
.\b2 --with-python --prefix="d:\boost" install toolset=msvc-14.3 runtime-link=shared link=static address-model=64
该指令会同时编译 release 和 dubug 版本,若要单独编译某一个版本,则可使用以下指令:
release 版
.\b2 --with-python --prefix="d:\boost" install toolset=msvc-14.3 variant=release link=static address-model=64
dubug 版
.\b2 --with-python --prefix="d:\boost" install toolset=msvc-14.3 variant=debug link=static address-model=64
注:由于还要复制各种头文件,所以总耗时大概 10 ~ 20 min。 b2 / bjam(老版本名) 部分命令参数说明
- –with- | --without- --with- 后面接要编译的 boost 的库名,如 --with-python 即仅编译 boost::python 库。相对的,–without-python 即为编译除 boost::python 之外全部库。如果要编译 ( 或不编译 ) 多个库的话,可用多条 with | without 语句来指定,缺省则为全部编译。
- install | stage stage 即只生成库,而 install 还会生成 include 目录。通过 --prefix=“g:\boost” 指定 install 生成好的库的路径为 “g:\boost”。如果是 stage 则由 --stagedir= 来指定。
- toolset 指定编译工具,此处我们指定为 msvc 14.1,即 vs 2017 的编译器
- link 即指定编译为动态库还是静态库 ( .dll | .lib ),shared 即编译为动态库,static 即为静态库,不填则默认编译为静态库。一般而言静态库体积要大一些,但不用带 boost::python 的 dll 文件,部署和使用也较为方便; 动态库的话相对体积较小(也小不了多少),但必须用带 boost::python 的 dll 文件。选择静态库还是动态库这个得自己取舍。
- address-model 指定编译为 32 位还是 64 位,我们指定 address-model=64 即编译为 64 位。
- threading:单/多线程编译。默认多线程multi,一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。
如下没报错,就说明编辑完成:

二、配置vs文件
- 打开vs 2022 并创建一个 c++ 空项目:helloboostpython,将工具栏那的改为
release-x64。
- 打开项目属性,即解决方案管理器中选择该项目
右键→属性,在配置属性→常规中修改目标文件名为hello_boost,配置类型改为动态库(.dll),
配置属性→高级:目标文件拓展名改为:.pyd
配置属性→vc++目录:- 包含目录:目标环境下python的include文件夹,上述b2编译生成路径中的include文件夹(也就是–prefix="d:\boost"制定地址下的目录\include\boost-1_69)
c:\users\xxx\appdata\local\programs\python\python312\include d:\boost\include\boost-1_89

- 库目录:目标环境下python的libs文件夹,上述b2编译生成路径中的lib文件夹(也就是–prefix=“d:\boost”)
c:\users\xxx\appdata\local\programs\python\python312\libs d:\boost\include\lib

5. 配置属性→连接器→常规,添加附加库目录(同库目录)
目标环境下python的libs文件夹,上述b2编译生成路径中的lib文件夹(也就是–prefix=“d:\boost”)c:\users\xxx\appdata\local\programs\python\python312\libs d:\boost\include\lib

所有设置完成后点击【应用】-【确定】。
三、添加main.app文件
在项目下添加main.app文件:项目下右击源文件→添加→新建项,输入文件名点击【确定】。

在文件中编写相应代码:
// file : main.cpp
// 不在 #include <boost/python/...> 之前加上下面的宏定义的话
// 编译器会默认使用 boost::python 的动态链接库
#define boost_python_static_lib
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
const char * hello_boost() {
return "hello boost::python!";
}
const char * hello_world() {
return "hello world!";
}
// 此处 hello_boost 应该与之前设置的目标文件扩展名一致
boost_python_module( hello_boost ) {
using namespace boost::python;
def( "hello_boost", hello_boost );
def( "hello_world", hello_world );
}

编写完成后点击编译,编译成功会生成对应的hello_boost.pyd文件,即python的动态链接库文件,

可能还会遇到下面这个错误,忽略即可:

此时我们打开windows系统终端,进入到hello_boost.pyd该文件路径下,可以看到生成的.pyd文件就在这里。

进入python交互式命令窗口,使用import导入hello_boost库文件,并调用c文件中的函数,如果没报错就说明成功了,如下:

可参考链接:https://note.qidong.name/2018/01/hello-boost-python/
总结
到此这篇关于windows系统下boost.python的配置和使用方法的文章就介绍到这了,更多相关boost.python配置使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论