在 C 代码中找不到库
Posted
技术标签:
【中文标题】在 C 代码中找不到库【英文标题】:Can not find libraries in C code 【发布时间】:2018-11-09 06:00:47 【问题描述】:我正在尝试使用 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++ 添加到每个文件的开头,但 定义应该针对头部,而不是实现:
cdef extern from "cfile.h":
pass
如果使用 C++ 库,必须将 language='c++'
指令添加到 setuptools/cythonize。
cythonize(<..>,
language="c++",
)
另见docs。
【讨论】:
以上是关于在 C 代码中找不到库的主要内容,如果未能解决你的问题,请参考以下文章