windows系统下Boost.Python的配置和使用方法(新手教学)

 更新时间:2026年01月27日 11:22:38   作者:河里捉条鱼  
Boost.Python是Boost库的一部分,Boost库本身包含了许多其他有用的库,这篇文章主要介绍了windows系统下Boost.Python的配置和使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

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配置使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Jupyter Notebook读取csv文件出现的问题及解决

    Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了Jupyter Notebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 浅谈function(函数)中的动态参数

    浅谈function(函数)中的动态参数

    下面小编就为大家带来一篇浅谈function(函数)中的动态参数。小编觉得听不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 浅谈Python协程

    浅谈Python协程

    这篇文章主要介绍了Python协程的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • python numpy库中数组遍历的方法

    python numpy库中数组遍历的方法

    本文主要介绍了python numpy库中数组遍历的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 通过Python pyecharts输出保存图片代码实例

    通过Python pyecharts输出保存图片代码实例

    这篇文章主要介绍了通过Python pyecharts输出保存图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Matplotlib实战之面积图绘制详解

    Matplotlib实战之面积图绘制详解

    面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,这篇文章主要介绍了如何利用Matplotlib实现面积图的绘制,需要的可以参考下
    2023-08-08
  • Python如何用str.format()批量生成网址(豆瓣读书为例)

    Python如何用str.format()批量生成网址(豆瓣读书为例)

    这篇文章主要介绍了Python如何用str.format()批量生成网址(豆瓣读书为例),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Python+pyecharts绘制交互式可视化图表

    Python+pyecharts绘制交互式可视化图表

    本文我们来了解一个新的可视化模块pyecharts,并且利用该模块绘制让数据变成优美的交互式可视化图表,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-04-04
  • Pycharm自动添加文件头注释和函数注释参数的方法

    Pycharm自动添加文件头注释和函数注释参数的方法

    这篇文章主要介绍了Pycharm自动添加文件头注释和函数注释参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 对Python random模块打乱数组顺序的实例讲解

    对Python random模块打乱数组顺序的实例讲解

    今天小编就为大家分享一篇对Python random模块打乱数组顺序的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11

最新评论