【发布时间】:2023-04-10 04:25:01
【问题描述】:
我正在尝试使用 cython 编译模块,但编译器无法在外部 c 文件中找到包含库(我以 cmath 为例,但我想要的其他库如 cstdio、cstdint , cstring 也有同样的问题)
一个最小的示例由以下 4 个简单文件组成:
cfile.c:
#include <cmath>
test_pxd.pxd:
cdef extern from "cfile.c":
pass
test.pyx:
cimport test_pxd
setup.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 文件,例如使用g++ -c cfile.c,不需要任何额外的链接让编译器找到这些库。
如何让 cython 中的编译器在外部 c 文件中找到 cmath(以及其他,例如 cstdio、cstdint、cstring)库?
【问题讨论】:
-
如果是c,则名称为
math.h,cmath是c++符号 -
另外,使用 C 编译器,例如
gcc,而不是 C++ 编译器(此处为g++)。 -
我尝试将标志 "language='c++' 添加到 cythonize,并将 #distutils: language=c++ 添加到每个文件的开头,但
仍然不起作用。 -
好吧,我还必须将扩展名更改为 .cpp,而不是 .c,现在它可以工作了