使用numpy自动生成具有函数的共享库

2024-04-25 04:43:59 发布

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

我想在C代码中嵌入numpy函数,我已经通过使用cython成功地嵌入了不使用外部模块的普通python函数(并且成功地将import numpy...放在顶部而没有实际使用它),但是当我在函数中使用np.array时,我在一行中遇到了一个segfault

__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error)

为该函数生成的C源代码。我怎样才能做到?你知道吗

foo.pyx文件:

# cython: language_level=3
import numpy as np
cimport numpy as np
cdef public int foo(int x):
    return np.array(range(x)).max()

if __name__ == "__main__":
    print(foo(5))

main.c:

#include <python3.7m/Python.h>
#include <stdio.h>
extern int foo(int);
int main() {
    Py_Initialize();
    printf("%d\n", foo(5));
    return 0;
}

编译步骤:

cython --embed foo.pyx
gcc -g -o libfoo.so -fPIC -shared -pthread -I /usr/include/python3.7m foo.c -L /usr/lib/python3.7/config-3.7m-x86_64-linux-gnu/ -Xlinker --export-dynamic -I /usr/lib/python3.7/site-packages/numpy/core/include -lpython3.7
gcc -g main.c -L. -lfoo -lpython3.7

Tags: 函数importnumpyreturniffooincludemain