我有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 ++而不是python中使用这个so
文件。
#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);
答案 0 :(得分:1)
尝试将您的c代码更改为:
#include <stdio.h>
#include "Python.h"
#include "random.h"
int main() {
Py_Initialize();
PyInit_random(); // see "random.h"
int r = get_random_number();
Py_Finalize();
printf("%d\n", r);
return 0;
}
请注意,要运行可执行文件,您无法摆脱python环境。
另见How to import Cython-generated module from python to C/C++ main file? (programming in C/C++)