【发布时间】: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 扩展来编译它?