我能用c++用cython编译动态库吗?

2024-06-28 19:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

cdef public int get_random_number():
    return 4

使用setup.py这样:

^{pr2}$

然后我得到了一个动态库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);

Tags: 文件numbergetreturnsoincludemainrandom
1条回答
网友
1楼 · 发布于 2024-06-28 19:36:06

尝试将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++)

相关问题 更多 >