将 struct 中的 C 结构数组映射到 Cython

wl2776

更新GitHub 上的最小示例:https : //github.com/wl2776/cython_error

我有一个 C 库,我想从 Python 访问它。我正在为它开发 Cython 包装器。

该库具有以下声明:

文件“globals.h”

typedef struct
{
    int x;
    int y;
    int radius;
} circleData;

文件“O_Recognition.h”

#include "globals.h"
typedef struct 
{
   int obj_count;
   circleData circle_data[2];
   float parameters[2];
} objectData;

我将这些类型映射到 .pxd 文件中的 Cython,如下所示:

文件“cO_Recognition.pxd”:

cdef extern from "globals.h":
    ctypedef struct circleData:
        int x;
        int y;
        int radius;

cdef extern from "O_Recognition.h":
    ctypedef struct objectData:
        int obj_count;
        circleData circle_data[2];
        float parameters[2];

这不编译。我收到错误:

Error compiling Cython file:
------------------------------------------------------------
...
    void PyTuple_SET_ITEM(object  p, Py_ssize_t pos, object o)
    void PyList_SET_ITEM(object  p, Py_ssize_t pos, object o)

@cname("__Pyx_carray_to_py_circleData")
cdef inline list __Pyx_carray_to_py_circleData(circleData *v, Py_ssize_t length):
                                                ^
------------------------------------------------------------
carray.to_py:112:45 'circleData' is not a type identifier

还有一个细节,这是 CMake 项目的一部分,它是使用来自 GitHub 的这个示例构建的:https : //github.com/thewtex/cython-cmake-example

CMakeLists.txt 的相关部分包括具有其他名称的 .pyx 文件,即cimportcDeclarations.pxd

丹尼

问题是circleDataO_Recognition.hextern 块中未定义它之前的定义仅适用于globals.hextern 块。

只需要包含它的类型,以便 Cython 知道它是什么。它不需要重新定义。

cdef extern from "globals.h" nogil:
    ctypedef struct circleData:
        int x;
        int y;
        int radius;

cdef extern from "O_Recognition.h" nogil:
    ctypedef struct circleData:
        pass
    ctypedef struct objectData:
        int obj_count;
        circleData circle_data[2];
        float parameters[2];

编译代码时,该.c文件将include同时包含头文件并从globals.h.

从技术上讲,除非结构成员将在 Cython 代码中使用,否则也不需要circleDataglobals.hextern 块中定义成员

请记住,pxd文件是 Cython 代码的定义,而不是 C 代码。仅包含要在 Cython 代码中使用的成员,否则只能定义circleData每个识别外部块的类型 sans 成员

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将C#字典映射到jQuery中的数组

来自分类Dev

将C#字典映射到jQuery中的数组

来自分类Dev

将Cython中的C结构包装/铸造为Python类

来自分类Dev

在Cython中包装C ++结构

来自分类Dev

如何在cython中将C结构从C结构映射到int?

来自分类Dev

将 javascript 对象映射到数组结构

来自分类Dev

在C中构造(将值分配给struct数组)

来自分类Dev

将js对象映射到V8中的结构

来自分类Dev

如何使用jq将项目映射到json结构中?

来自分类Dev

从C的struct数组中检索struct for qsort

来自分类Dev

在不克隆的情况下将一个结构数组映射到Rust中的另一个结构数组

来自分类Dev

如何在cython中实现从C结构到int的C ++映射?

来自分类Dev

将struct与C中的常量进行比较

来自分类Dev

在C ++中嵌入Cython

来自分类Dev

将多维数组对象映射到类中的变量

来自分类Dev

将多维数组中的元素映射到其索引

来自分类Dev

将IO映射到fp-ts中的Either数组

来自分类Dev

将值映射到数组对象中的键

来自分类Dev

无法将关系映射到Restkit中的数组

来自分类Dev

如何通过“ return(struct a *)b”之类的东西将一个结构映射到另一个结构

来自分类Dev

MSVC:将结构映射到 offsetof 数组时出错

来自分类Dev

将指向数组值的指针从 Cython 传递给 C

来自分类Dev

如何将dropDownlist映射到C#中的枚举?

来自分类Dev

将文件读入struct C ++数组

来自分类Dev

在C中映射类似结构的结构:使用int和struct确定一个值

来自分类Dev

将结构放入C中的数组元素

来自分类Dev

(C ++)将数组存储在结构中

来自分类Dev

C ++中的struct中的struct

来自分类Dev

C编程:从文件读取数据,动态分配内存,将内容放置在struct数组中

Related 相关文章

热门标签

归档