Windows上Python使用swig呼叫C++
安裝swig和VS
swig是一種可以將C++程式碼轉換為多種指令碼語言封裝的工具,可以在http://www.swig.org/下載(Windows users should download swigwin-3.0.12 which includes a prebuilt executable. ),解壓後將swig.exe的路徑新增到環境變數path中即可使用swig。
我是電腦配置是win10,python3.6與VS2017。
C++程式碼
編寫需要在Python中呼叫的C++程式碼,最好將函式和類的宣告統一放到標頭檔案中,函式和類的實現放到原始檔中
標頭檔案example.h
#include <iostream>
using namespace std;
class example {
private:
int num;
public:
void say_hello(void);
void change(int din);
int get_num();
};
原始檔example.cpp
#include "example.h"
void example::say_hello(void) {
cout << "hello python,I am C++" << endl;
}
void example::change(int din) {
num = din;
}
int example::get_num(void) {
return num;
}
swig封裝
swig封裝需要一個.i
字尾檔案的封裝說明,其中
%module <name>
為封裝名稱,Python呼叫的包名就是<name>
%{...%}
為附加的函式說明和標頭檔案,原始檔以外的部分都要包括在這裡,包括標頭檔案和巨集定義等- 之後為要封裝的函式或類,可以直接引用標頭檔案(若已經將要封裝的部分的宣告寫在標頭檔案中)
example.i
%module Example_swig
%{
#include "example.h"
%}
%include "example.h"
在cmd下執行命令swig -python -c++ example.i
會生成兩個檔案:example_wrap.cxx和Example_swig.py
使用VS編譯
在C++的空工程基礎上建立環境,在生成->配置管理器中設定:
活動解決方案配置
為Release
活動解決方案平臺
為X64
(本機為64位機)
在專案->屬性
中配置Python的庫
- 在
VC++目錄
中的包含目錄
中,匯入Python安裝路徑下的include路徑(包含Python.h)
- 在
連結器->常規
的附加庫目錄
中,匯入Python安裝路徑下的libs路徑
- 另外要在常規->配置型別裡選擇動態庫(.dll)
編譯輸出
選擇生成->生成解決方案
,在x64->Release資料夾下有一個.dll檔案,即為編譯輸出的動態連結庫。將其名稱改為_<name>.pyd
(本例中為_Example_swig.pyd
),將其與swig生成的<name>.py
檔案放在同一目錄中.
測試呼叫
在python裡,使用import <name>
即可呼叫生成的檔案(同一目錄下)
windows下 tf-pose-estimation 測試安裝環境,這裡有用到swig,我自己的環境是win10,python3.6,當執行以下語句報錯<無法開啟包括檔案: “numpy/arrayobject.h”: No such file or directory>時,參考https://blog.csdn.net/as472780551/article/details/83787882,修改C:\workspace\code\tf-pose-estimation-master\tf_pose\pafprocess路徑下setup.py中新增一句include_dirs=[np.get_include()]即可
swig -python -c++ pafprocess.i && python setup.py build_ext --inplace
from distutils.core import setup, Extension
import numpy
import os
# os.environ['CC'] = 'g++';
setup(name='pafprocess_ext', version='1.0',
ext_modules=[
Extension('_pafprocess', ['pafprocess.cpp', 'pafprocess.i'],
swig_opts=['-c++'],
depends=["pafprocess.h"],
include_dirs=[numpy.get_include(), '.'])
],
include_dirs=[numpy.get_include()],
py_modules=[
"pafprocess"
]
)
參考資料:
Windows平臺下Python使用swig呼叫C++:https://www.jianshu.com/p/a257e630fe42
相關文章
- SWIG 打包C++陣列供python呼叫 tcyC++陣列Python
- CGO Swig 使用筆記Go筆記
- Python呼叫C/C++方式PythonC++
- linux下使用boost.python呼叫c++動態庫LinuxPythonC++
- Windows 下 c++ 呼叫 Rust 庫的例子WindowsC++Rust
- Python呼叫C++編寫的方法PythonC++
- Python與C/C++呼叫之ctypesPythonC++
- linux下qt用c++呼叫pythonLinuxQTC++Python
- python和c++的相互呼叫教程PythonC++
- 如何在Windows上使用Python進行開發WindowsPython
- 技術積累——C++ 呼叫 python 專案C++Python
- 使用python解密SecureCRT上儲存的密碼 (Windows)Python解密Securecrt密碼Windows
- C++呼叫LuaC++
- Windows上TDengine初次使用Windows
- 在 Windows 上使用 FFmpegWindows
- Qt中用C++呼叫Python檔案的三種方法QTC++Python
- 使用C++/CLI呼叫C#封裝類庫C++C#封裝
- 在 C/C++ 中使用 TensorFlow 預訓練好的模型—— 間接呼叫 Python 實現C++模型Python
- 使用PyO3從Python呼叫 Rust:加速PythonPythonRust
- C++呼叫C介面C++
- node中使用C++模組呼叫呼叫speex完成語音檔案壓縮C++
- 在windows7上使用python 3.9及更高版本的辦法WindowsPython
- 在 Windows 上使用 scp 命令Windows
- windows上使用roadrunner-laravelWindowsLaravel
- python gdal 安裝使用(Windows, python 3.6.8)PythonWindows
- Windows 系統呼叫Windows
- 使用Python來呼叫電腦音響Python
- java呼叫c++動態庫之jni呼叫JavaC++
- Linux C/C++呼叫mongDBLinuxC++
- json的使用(python寫,c++讀)JSONPythonC++
- Python呼叫ansible API系列(五)綜合使用PythonAPI
- 如何使用python super函式呼叫父類?Python函式
- windows C++ 獲取使用者桌面路徑WindowsC++
- 在windows上配置vs code編譯除錯c/c++Windows編譯除錯C++
- 教你如何在 Andorid 上使用OpenAI API 呼叫ChatGptOpenAIAPIChatGPT
- 使用 C++ 呼叫 YOLOv3 模型進行物體檢測C++YOLO模型
- java動態呼叫c++庫JavaC++
- C#呼叫 C++的DLLC#C++