使用/编译 C++ 与 Cython

Posted

技术标签:

【中文标题】使用/编译 C++ 与 Cython【英文标题】:Using/Compiling C++ with Cython 【发布时间】:2017-09-24 20:14:04 【问题描述】:

我正在从事一个需要在 cython 中进行大量字典查找的项目。为了提高速度,我尝试用 libcpp 中的 unordered_maps 替换字典。

#!python
#cython: boundscheck=False, wraparound=False, infer_types=True,cdivision = True
from libcpp.unordered_map cimport unordered_map

但是,当我尝试在命令行上使用 gcc 进行编译时,编译失败并显示

CAStar2.c:482:19: fatal error: utility: No such file or directory
 #include <utility>
                   ^
compilation terminated.

编译器似乎找不到多个必需的文件。 我如何将它指向这些文件?

【问题讨论】:

你从哪里得到“CAStar2.c”?如果使用 gcc 默认选项进行编译,它将使用其扩展名将其视为“c”文件,但 utility 标头是 C++ 标准库的一部分。 CAStar.2 是我正在尝试编译的程序。是cython -a CAStar2.pyx生成的C文件。 Cython 支持 C++,但是我无法弄清楚如何从 .pyx 文件创建它。尝试使用 language = "c++" 编译它失败并出现数千个错误 一种快速的方法(不能保证有效并且可能会引入潜在的错误,请注意)是将扩展名从“.c”更改为“.cpp”或使用 gcc 选项“-x c++”。 Cython 竟然能够与 C++ 无缝协作,真是太奇怪了。可以分享一下使用language=c++编译时的一些错误吗? 看看cython.readthedocs.io/en/latest/src/userguide/…尤其是setup.py 【参考方案1】:

cython 生成的 C 文件需要通过 setuptools Extension 编译。

如果手动编译 setuptools 将使用的所有 include 和 lib 目录,也需要手动指定。

请参阅 cython setuptools documentation here 和 here for a minimal compile from cmd line example。

【讨论】:

【参考方案2】:

我发现问题是我的编译器没有激活对 cython 似乎产生的 c++11 的支持。添加选项-std=c++11 一切正常编译。 感谢所有帮助过的人。

【讨论】:

以上是关于使用/编译 C++ 与 Cython的主要内容,如果未能解决你的问题,请参考以下文章

如何手动编译使用 C++ 的 Cython 代码?

我可以在 C++ 中使用 cython 编译的动态库吗?

Cython 中 C++ 函数的性能不佳

在 C++ 中嵌入 Cython

在 Cython 中使用 C++ STL 映射

Cython -std=c++11 错误,同时使用 C 和 C++