使用Visual Studio部署Boost::Python
前言:
笔者在不久前配置了Boost::Python然而因为不熟悉VS犯了个很蠢的错误,浪费了一个多晚上,有感而发写篇博客吧!纪念我被浪费的晚上!
环境
笔者的环境是:
- Windows 11 64 bit
- Anaconda Python 3.9 64 bit
- Visual Studio 2022 Community Edition version 17.6.2 (msvc v14.3)
- Boost 1.82
下载并编译
下载
官网下载地址为https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/ ,截至此博客发布时最新版本为1.82。笔者下载的版本是boost_1_82_0.zip
下载并解压后,执行booststrap.bat
,会发现文件夹中多了一个b2.exe
,这是一个编译工具。接下来我们进入编译工作。
配置user_config.jam
你可以在\\tool\\build\\example\\user-config.jam
看到模板,将其做如下修改:
1 | ... |
如果你不确定你的msvc版本,可以参考https://en.wikipedia.org/wiki/Microsoft_Visual_C++ ,using python使用自己的配置。修改好后将文件复制到C:\\users\\youUserName\\
即可。
编译
我们通过命令行使用b2.exe
进行编译,笔者使用的命令是
1 | ./b2.exe --with-python stage --stagedir="./bin/lib64-msvc-14.3" link=static address-model=64 |
b2部分命令行参数说明
--with
后面接的是需要编译的库,而--with-python
则说明只编译Boost::Python
。install
|stage
stage
即只生成库,而install
还会生成include
目录。通过--prefix="libPath"
指定instalSl
生成好的库的路径为"libPath"
。如果是stage
则由--stagedir=
来指定。link
即指定编译为动态库还是静态库 (.dll | .lib
),shared
即编译为动态库,static
即为静态库,不填则默认编译为静态库。address-model
指定是编译为32位还是64位。
编译完成后,可以在\\bin\\lib64-msvc-14.3\\lib\\
下看到四个文件,
1 | libboost_numpy39-vc143-mt-gd-x64-1_82.lib |
其中,python 和 numpy 各 2 个,带 gd
的对应 debug
版本,反之对应 release
版本。
配置Visual Studio
首先建立一个空项目,这一部分就不赘述了,然后打开项目属性:
在常规中给目标文件名取一个名字,并务必记住他。
在高级中将目标文件后缀名设置为 .pyd 。
配置包含目录,包含boost目录和python目录,我的配置是
1
2 D:\\boost\\boost_1_82_0\\
D:\\Anaconda\\include\\配置库目录,包含boost库目录和python库目录,我的配置是
1
2 D:\\boost\\boost_1_82_0\\bin\\lib64-msvc-14.3\\lib\\
D:\\Anaconda\\libs\\
测试
编写C++文件
不多说了,直接上文件!
1 | // File : main.cpp |
小提示
记得源代码要右键源代码然后添加啊不然就会像我一样以为没配置好环境一直再搞啊啊啊!!!
Python测试
如果你执行的是release
,进入目录file2project\\x64\\release\\
,否则进入file2project\\x64\\debug\\
,你能看到一个文件Hello_Boost.pyd
,这就是刚才的C++源代码生成的Python模块。
我们open in terminal
,进入Python,检测import
及函数调用是否正常
如果到这一步都没有问题!那就应该没有问题了!写你的代码去吧!