今天在研究PyTorch中Tensor的一些操作的时候,发现其底层Tensor的操作都是用C++写的,并使用pybind11进行C++和Python的桥接。所以,我就想着探索一下Python中如何调用C++代码?
其实,方案还是挺多的:
感觉ctypes简单很多,对于小型程序感觉还是挺友好的,所以该篇博客介绍一下使用ctypes调用C/C++的步骤。
头文件(test.h)
int sum(int, int);
C++代码(test.cpp)
// Windows需要__declspec(dllexport)申明
// extern "C"指示以C语言规范进行编译
#define DLLEXPORT extern "C"
DLLEXPORT int sum(int a, int b) {
return a + b;
}
或者C代码(test.c)
// 同样的Windows在函数前面需要__declspec(dllexport)申明
int sum(int a, int b) {
return a + b;
}
我使用的是macOS,选择使用gcc进行编译gcc -Wall -Wextra -O -ansi -pedantic -shared test.c -o test.so
In [1]: from ctypes import cdll
In [2]: mydll = cdll.LoadLibrary('test.so')
In [3]: mydll.sum
Out[3]: <_FuncPtr object at 0x10f4cf688>
In [4]: mydll.sum(5, 2)
Out[4]: 7