Cython:编译所有C依赖项

时间:2017-11-24 23:24:17

标签: python c cython

我正在尝试使用Cython为C库编写包装器。

我创建了一个使用我的C例程的简单pyx文件。

cdef extern from "sel.h":
    void parse_file(const char *file)


cpdef void main(str file):
    file_pybyte = file.encode('UTF-8')
    cdef char*c_file = file_pybyte

    parse_file(c_file)

sel.c文件导入位于src目录中的C库,该库包含数百个文件。

// sel.c
#include "src/clib/finder.h"
#include "src/clib/core/core.h"
#include "src/clib/encoding/encoding.h"

这些初始头文件中包含很多其他内容。

每当我试图运行已编译的库时,我都会收到错误:

  

未找到符号:_type_attribute
  期望:平面命名空间

type_attribute函数在src/clib/finder.h文件中导入。

如何自动查找和编译C库中的所有依赖项?

我的设置配置如下所示:

cythonize([Extension("*",
                     ["lib/*.pyx",
                      "lib/sel.c",
                      ],
                     include_dirs=[
                         'lib/src/clib/',
                         'lib/src/clib/include', ],

                     )])

我已尝试在配置中列出所有C文件,但由于此库包含许多特定于平台的文件,因此无法正常工作。

1 个答案:

答案 0 :(得分:1)

extern "C" {
    #include "src/clib/finder.h"
}

这将包括它作为C而不是C ++。

此处的赠品是符号中的_,表示它具有C ++名称重整