【发布时间】:2017-09-28 11:08:48
【问题描述】:
我有一个 cython 文件 random.pyx 像这样:
cdef public int get_random_number():
return 4
setup.py 像这样:
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
extensions = [Extension("librandom", ["random.pyx"])]
setup(
ext_modules = cythonize(extensions)
)
然后我得到一个动态库librandom.so,现在我想在c++中使用这个so文件而不是python。
#include <stdio.h>
#include "random.h"
int main() {
printf("%d\n",get_random_number());
return 0;
}
现在我在编译 g++ -o main main.cpp -lrandom -L. -Wl,-rpath,"\$ORIGIN" 时遇到这样的错误:
In file included from main.cpp:2:0:
random.h:26:1: error: ‘PyMODINIT_FUNC’ does not name a type
PyMODINIT_FUNC initrandom(void);
【问题讨论】:
-
您需要将 python-includes 以及 python 库添加到您的构建中,而且如果不先初始化,您将无法使用 cython 模块的功能。该答案填补了 cython 教程的空白,可能对您有所帮助:stackoverflow.com/a/45424720/5769463