Python 我可以在c+;中使用cython进行动态库编译吗+;?

Python 我可以在c+;中使用cython进行动态库编译吗+;?,python,c++,dll,cython,Python,C++,Dll,Cython,我有一个cython文件random.pyx如下: cdef public int get_random_number(): return 4 from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension extensions = [Extension("librandom", ["random.pyx"])] setup(

我有一个
cython
文件
random.pyx
如下:

cdef public int get_random_number():
    return 4
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)
)
像这样使用
setup.py

cdef public int get_random_number():
    return 4
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;
}

尝试将您的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.h”
#包括“random.h”
int main(){
Py_初始化();
PyInit_random();//参见“random.h”
int r=get_random_number();
Py_Finalize();
printf(“%d\n”,r);
返回0;
}
请注意,要运行可执行文件,您无法摆脱python环境


另请参见

您需要将python包含和python库添加到您的构建中,而且如果不先初始化cython模块,您就不能使用cython模块的功能。这个答案填补了cython教程的空白,可能会对您有所帮助: