在 Cython 项目中包含 .o 文件

Including .o files in Cython Project

我正在尝试使用 Cython 进行 Python 绑定以与 C 对象交互。我得到了:

parser.oparser.h

我制作了 .pyx.pxd 文件来定义我将从 .h 文件中使用的方法和类型。当我尝试调用我在 .pxd 中定义的方法时,它反映了 .h 中定义的方法,我收到错误:

undefined symbol: function_name

我的 setup.py 看起来像:

from setuptools import setup, Extension
from Cython.Build import cythonize

extensions = [
        Extension(
                'parser',
                ['parser.pyx'],
        )
]
compiler_directives = {'language_level': 3}

setup(
        ext_modules = cythonize(
                extensions,
                **compiler_directives
        )
)

我想我不知道如何包含给我的 parser.o 文件。任何关于如何 link .o 文件与我正在尝试做的事情的帮助都会很棒。

今天早上遇到了同样的问题,发现扩展需要通过extra_link_args提供额外的.o文件。但是,在您的情况下,我担心 Cython 会破坏您的 parser.c 文件。将原来的 parser.cparser.h 重命名为 parser_c.cparser_c.h 之类的名称可能有助于避免这种情况;并生成 parser_c.o.

from Cython.Build import cythonize

extensions = [
        Extension(
                'parser',
                ['parser.pyx'],
                extra_link_args = ['parser_c.o']
        )
]
compiler_directives = {'language_level': 3}

setup(
        ext_modules = cythonize(
                extensions,
                **compiler_directives
        )
)```