【问题标题】:Cython: Compile all C dependenciesCython:编译所有 C 依赖项
【发布时间】:2017-11-24 23:24:17
【问题描述】:

我正在尝试使用 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 文件,但它不起作用,因为这个库有很多特定于平台的文件。

【问题讨论】:

  • 您最好将您的 C 库视为一个单独的库,并使用您链接的自己的 makefile,而不是尝试使用您的 Python 扩展来编译它?

标签: python c cython


【解决方案1】:

试试

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

这会将其包含为 C 而不是 C++。

这里的赠品是符号中的 _,表明它具有 C++ 名称修饰

【讨论】:

    猜你喜欢
    • 2022-09-13
    • 2013-04-21
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多