c – 无法执行Cython包装的Python代码
发布时间:2020-12-16 07:20:36 所属栏目:百科 来源:网络整理
导读:我正在使用Cython导出用于 python代码的C API.该应用程序将在Ubuntu上执行.项目文件存在 here 我正在包装的函数,读取图像的文件名并显示图像. Show_Img.pyx文件如下所示 import cv2cdef public void Print_image(char* name): img = cv2.imread(name) cv2.im
我正在使用Cython导出用于
python代码的C API.该应用程序将在Ubuntu上执行.项目文件存在
here
我正在包装的函数,读取图像的文件名并显示图像. Show_Img.pyx文件如下所示 import cv2 cdef public void Print_image(char* name): img = cv2.imread(name) cv2.imshow("Image",img) while(True): if cv2.waitKey(1) & 0xFF == ord('q'): break 从Cython生成的c接口如下所示 __PYX_EXTERN_C DL_IMPORT(void) Print_image(char *); 头文件包含在我的algo.cpp中,它调用下面的函数 #include<iostream> #include<Python.h> #include"Show_Img.h" using namespace std; int main(){ char *name = "face.jpg"; Py_Initialize(); Print_image(name); Py_Finalize(); return 0; } 使用下面的命令,我还可以编译上面的代码并生成应用程序 g++ algo.cpp `pkg-config --libs --cflags python-2.7` `pkg-config --libs --cflags opencv` -L. -lShow_Img -o algo 还正确设置了库LD_LIBRARY_PATH的路径 执行应用程序时,出现错误分段错误(核心转储) 为什么我无法执行应用程序,生成过程中是否存在错误?或图书馆链接? 解决方法
要跟进我的评论,你必须为模块调用init函数:
// ... Py_Initialize(); initShow_Img(); // for Python3 use PyInit_Show_Img instead Print_image(name); Py_Finalize(); // ... 原因是这个设置模块,包括执行行导入cv2.没有它,访问模块全局变量(到达cv2)之类的东西将无法可靠地工作.这可能是导致分段错误的原因. 这是在the documentation example. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |