我有一个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);
最佳答案
尝试将您的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++)
关于python - 我可以在C++中将动态库编译与Cython一起使用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46467660/