python - 在 C 代码中找不到库
问题描述
我正在尝试使用 cython 编译模块,但编译器在外部 c 文件中找不到包含库(我使用cmath
作为示例,但我想要的其他库,例如cstdio
,,cstdint
也cstring
有同样的问题)
一个最小的示例由以下 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
解决方案
定义应该针对标题,而不是实现:
cdef extern from "cfile.h":
pass
如果使用 C++ 库,必须将language='c++'
指令添加到 setuptools/cythonize。
cythonize(<..>,
language="c++",
)
另请参阅文档。
推荐阅读
- asp.net - 即使在传递数据之后,JsonElement 参数的 valuekind 也未定义?
- javascript - 无法读取未定义反应错误的属性“长度”
- http - 服务器如何调用端点 https 或 http
- git - 如何在 VS 中添加文件并将其推送到克隆存储库中
- git - git format-patch 在功能分支上返回空响应
- abap - 如何在 SAP GW 中实现 SSE(服务器端事件)
- coinbase-api - 使用 coinbase-api 通过 apiKey 和 apiSercrt 获取所有账户
- node.js - 比较 2 个嵌套的 Json 数组,用 Json B 覆盖和合并 Json A
- tensorflow - 使用 pytorch rnn 模型进行推断时的准确性损失
- google-cloud-platform - 为什么我在为我的操作系统下载任何补丁时需要启用 Cloud NAT,即使我使用的是私人 Google 访问权限