创建了一个包含许多源文件和头文件的 C 库后,我现在需要用 Python 层包装它,以便“导入”它。
我已经实现了要从 Python 调用的静态方法,我需要指定模块应该向解释器公开哪些方法。
但是,在指定可以调用的内容时,文档似乎只处理具有单个源文件的非常简单的情况,因为唯一的非静态方法必须是注册方法的 init。
据我所知,如果其他源文件中的方法在 C 中声明为静态,则不可能调用它们(如果我在那里错了,请纠正我)所以,每个 python 模块只能有一个 C 文件,因为整个过程中只允许使用一种非静态方法。
真的是这样吗?如果你想从 Python 访问它,你必须把你的代码构造得不好/根本不构造吗?
编辑:
所以,我最终得到这个工作的方式是使用Cython。重写 c/python 接口不仅需要大约一个小时(由于所有引用计数规则等原因,之前需要大约一天时间),而且它还为您处理所有构建问题,并且有清晰的文档准确描述了哪个方法将可从 python 获得。
特别是,我使用的文档章节是构建说明、如何调用 C 库、语言基础知识以及如何转换类型,尤其是指针。
对于希望将现有的复杂结构的 C 代码(即不仅仅是一个文件)包装为 python 库的任何人,我强烈推荐 Cython。