windows系統(tǒng)下Boost.Python的配置和使用方法(新手教學(xué))
Boost.Python簡介
Boost庫是一個可移植、開源的C++庫,它是由C++標(biāo)準(zhǔn)委員會庫工作成員發(fā)起、維護(hù)。其目的是為C++程序員提供免費、同行審查的、可移植的程序庫。Boost庫可以與C++標(biāo)準(zhǔn)庫完美共同工作,并且為其提供擴(kuò)展功能。Boost由于其對跨平臺的強調(diào),對標(biāo)準(zhǔn)C++的強調(diào),與編程平臺無關(guān)。大部分Boost庫功能的使用只需要包括相應(yīng)頭文件即可,少數(shù)(如正則表達(dá)式庫,文件系統(tǒng)庫等)需要鏈接庫。
Boost 庫是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。而Boost.Python庫是Boost庫的其中的一個子庫,使用它可以輕松地將C++的函數(shù)接口轉(zhuǎn)換成Python接口。在大部分情況下你不需要對原先的C++代碼做任何的修改,Boost.Python會對C++類再做一層封裝,使它編譯后符合Python的語言規(guī)范。
Boost.Python 安裝配置
安裝環(huán)境準(zhǔn)備(包)
windows系統(tǒng):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包-預(yù)編譯版本) ==Boost.Python下載地址:== 1)https://sourceforge.net/projects/boost/ 2)https://www.boost.org/releases/latest/
注意:以上包程序請按照順序安裝,否則會安裝失敗
一、Boost.Python安裝
1、進(jìn)入官網(wǎng)下載安裝包
打開官網(wǎng)地址,下載預(yù)編譯包boost_1_89_0-msvc-14.3-64.exe:

下載完成后點擊打開,進(jìn)入安裝頁面。開始會讓你選擇安裝位置,未特殊要求默認(rèn)即可,一直next:

安裝完成后,打開終端,進(jìn)入到boost.python安裝目錄下,運行bootstrap.bat文件:
命令:.\bootstrap.bat


執(zhí)行結(jié)束后,會在當(dāng)前目錄下生成b2.exe文件。

2、創(chuàng)建user-config.jam文件
在進(jìn)行Boost的編譯以前我們需要定義Python的版本,默認(rèn)下會自動搜索并使用$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 的話應(yīng)填 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方法二:進(jìn)入目錄:C:\local\boost_1_89_0\tools\build\example,找到文件:user-config.jam,復(fù)制一份到用戶的目錄下(例如:C:\Users\XXX\user-config.jam)即可。注意文件末尾的 python version 要改成當(dāng)前使用的Python版本。我是這兩個方法一起用了…

3、編譯
以上處理保存后,在當(dāng)前目錄下(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 位靜態(tài)庫。在 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
注:由于還要復(fù)制各種頭文件,所以總耗時大概 10 ~ 20 min。 b2 / bjam(老版本名) 部分命令參數(shù)說明
- –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 即指定編譯為動態(tài)庫還是靜態(tài)庫 ( .dll | .lib ),shared 即編譯為動態(tài)庫,static 即為靜態(tài)庫,不填則默認(rèn)編譯為靜態(tài)庫。一般而言靜態(tài)庫體積要大一些,但不用帶 Boost::Python 的 DLL 文件,部署和使用也較為方便; 動態(tài)庫的話相對體積較小(也小不了多少),但必須用帶 Boost::Python 的 DLL 文件。選擇靜態(tài)庫還是動態(tài)庫這個得自己取舍。
- address-model 指定編譯為 32 位還是 64 位,我們指定 address-model=64 即編譯為 64 位。
- threading:單/多線程編譯。默認(rèn)多線程multi,一般都寫多線程程序,當(dāng)然要指定multi方式了;如果需要編寫單線程程序,那么還需要編譯單線程庫,可以使用single方式。
如下沒報錯,就說明編輯完成:

二、配置VS文件
- 打開VS 2022 并創(chuàng)建一個 C++ 空項目:HelloBoostPython,將工具欄那的改為
Release-x64。
- 打開項目屬性,即解決方案管理器中選擇該項目
右鍵→屬性,在配置屬性→常規(guī)中修改目標(biāo)文件名為Hello_Boost,配置類型改為動態(tài)庫(.dll),
配置屬性→高級:目標(biāo)文件拓展名改為:.pyd
配置屬性→VC++目錄:- 包含目錄:目標(biāo)環(huán)境下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

- 庫目錄:目標(biāo)環(huán)境下Python的libs文件夾,上述b2編譯生成路徑中的lib文件夾(也就是–prefix=“D:\boost”)
C:\Users\XXX\AppData\Local\Programs\Python\Python312\libs D:\boost\include\lib

5. 配置屬性→連接器→常規(guī),添加附加庫目錄(同庫目錄)
目標(biāo)環(huán)境下Python的libs文件夾,上述b2編譯生成路徑中的lib文件夾(也就是–prefix=“D:\boost”)C:\Users\XXX\AppData\Local\Programs\Python\Python312\libs D:\boost\include\lib

所有設(shè)置完成后點擊【應(yīng)用】-【確定】。
三、添加main.app文件
在項目下添加main.app文件:項目下右擊源文件→添加→新建項,輸入文件名點擊【確定】。

在文件中編寫相應(yīng)代碼:
// File : main.cpp
// 不在 #include <boost/python/...> 之前加上下面的宏定義的話
// 編譯器會默認(rèn)使用 Boost::Python 的動態(tài)鏈接庫
#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 應(yīng)該與之前設(shè)置的目標(biāo)文件擴(kuò)展名一致
BOOST_PYTHON_MODULE( Hello_Boost ) {
using namespace boost::python;
def( "hello_boost", hello_boost );
def( "hello_world", hello_world );
}

編寫完成后點擊編譯,編譯成功會生成對應(yīng)的Hello_Boost.pyd文件,即Python的動態(tài)鏈接庫文件,

可能還會遇到下面這個錯誤,忽略即可:

此時我們打開Windows系統(tǒng)終端,進(jìn)入到Hello_Boost.pyd該文件路徑下,可以看到生成的.pyd文件就在這里。

進(jìn)入Python交互式命令窗口,使用import導(dǎo)入Hello_Boost庫文件,并調(diào)用C文件中的函數(shù),如果沒報錯就說明成功了,如下:

可參考鏈接:https://note.qidong.name/2018/01/hello-boost-python/
總結(jié)
到此這篇關(guān)于windows系統(tǒng)下Boost.Python的配置和使用方法的文章就介紹到這了,更多相關(guān)Boost.Python配置使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解讀FastAPI異步化為transformers模型打造高性能接口
這篇文章主要介紹了解讀FastAPI異步化為transformers模型打造高性能接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
python對raw格式照片進(jìn)行降噪處理的方法詳解
要對RAW格式的照片進(jìn)行降噪,我們可以使用rawpy庫來讀取RAW圖像,并使用imageio庫將處理后的圖像保存為其他格式,如PNG或JPEG,本文將詳細(xì)給大家介紹python如何對raw格式照片進(jìn)行降噪處理,文中有詳細(xì)的代碼流程,需要的朋友可以參考下2023-05-05
python中ndarray數(shù)組的索引和切片的使用
本文主要介紹了python中ndarray數(shù)組的索引和切片的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
django template實現(xiàn)定義臨時變量,自定義賦值、自增實例
這篇文章主要介紹了django template實現(xiàn)定義臨時變量,自定義賦值、自增實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07

