首页 > 解决方案 > 在 C 代码中找不到库

问题描述

我正在尝试使用 cython 编译模块,但编译器在外部 c 文件中找不到包含库(我使用cmath作为示例,但我想要的其他库,例如cstdio,,cstdintcstring有同样的问题)

一个最小的示例由以下 4 个简单文件组成:

cfile.c:

#include <cmath>

test_pxd.pxd:

cdef extern from "cfile.c":
    pass

测试.pyx:

cimport test_pxd

设置.py:

from distutils.core import Extension, setup
from Cython.Build import cythonize

sources = ['test.pyx']

extension = [Extension('test',sources)]

setup(ext_modules=cythonize(extension,force=True))

如果我运行setup.py

 python3 setup.py build_ext --inplace

我得到错误:

cfile.c:1:17:致命错误:cmath:没有这样的文件或目录

应该注意的是,直接编译 c 文件,例如 with g++ -c cfile.c,不需要任何额外的链接让编译器找到这些库。

如何使 cython 中的编译器在外部 c 文件中找到cmath(以及其他,例如cstdio, cstdint, )库?cstring

标签: pythonccythoncythonize

解决方案


定义应该针对标题,而不是实现:

cdef extern from "cfile.h":
    pass

如果使用 C++ 库,必须将language='c++'指令添加到 setuptools/cythonize。

cythonize(<..>,
          language="c++",
      )

另请参阅文档


推荐阅读