用cython将c++代码编译成pyd
compile c++ code into pyd with cython
Cython 将类似于 python 的代码编译为 C++ 代码,然后使用 gcc/g++ 将其编译为类似于 pyd 的库。
假设我会用纯 C++ 编写代码,然后将其编译成 pyd 以在 Python 中使用它,例如假设我有以下 C++ 模块
int sum(int a, int b){
return a + b
}
是否可以在不使用 PyObject、Ctype 等东西的情况下将该代码编译成 pyd?还是代码必须首先使用 Cython 语法编写才能与 Python 兼容?
我不是这方面的专家,但由于还没有人回答,这是我的看法:
如果你想避免在 C 中使用 PyObject 结构和 "Python.h",你应该使用 cython。
麻烦的是 **.pyd 是一个特别准备的 DLL,它公开了 import() 友好的接口,我认为,包括返回 PyObjects。
但是在普通 DLL 或共享对象库上使用 ctypes 并不难:
>>> import ctypes
>>> mysum = ctypes.cdll.LoadLibrary("mysum.so") # Or DLL
>>> print mysum.sum(2, 3)
5
您只需导出 sum 函数即可从动态库中使用并编译您的代码。
Cython 将类似于 python 的代码编译为 C++ 代码,然后使用 gcc/g++ 将其编译为类似于 pyd 的库。
假设我会用纯 C++ 编写代码,然后将其编译成 pyd 以在 Python 中使用它,例如假设我有以下 C++ 模块
int sum(int a, int b){
return a + b
}
是否可以在不使用 PyObject、Ctype 等东西的情况下将该代码编译成 pyd?还是代码必须首先使用 Cython 语法编写才能与 Python 兼容?
我不是这方面的专家,但由于还没有人回答,这是我的看法:
如果你想避免在 C 中使用 PyObject 结构和 "Python.h",你应该使用 cython。
麻烦的是 **.pyd 是一个特别准备的 DLL,它公开了 import() 友好的接口,我认为,包括返回 PyObjects。
但是在普通 DLL 或共享对象库上使用 ctypes 并不难:
>>> import ctypes
>>> mysum = ctypes.cdll.LoadLibrary("mysum.so") # Or DLL
>>> print mysum.sum(2, 3)
5
您只需导出 sum 函数即可从动态库中使用并编译您的代码。