在 Cython 中使用 C++ STL 映射
Posted
技术标签:
【中文标题】在 Cython 中使用 C++ STL 映射【英文标题】:Using C++ STL maps in Cython 【发布时间】:2017-04-05 20:43:31 【问题描述】:我正在尝试在 Cython 类中使用地图,但 Cython 编译器引发错误。
这是一个演示我的问题和 Cython 报告的错误的示例。
Cython 文件 pyx
from libcpp.map cimport map
from libcpp.utility cimport pair
from libcpp.string cimport string
cdef class MyDict:
cdef:
map[string, int] components
def __setitem__(self, key, value):
self.components[key] = value
def __getitem__(self, key):
return self.components[key]
Python 文件
from pyximport import install
install()
from dic_class import MyDict
m = MyDict()
m["home"] = 5
print m["home"]
Cython 报告的错误
致命错误:实用程序:没有这样的文件或目录
【问题讨论】:
正确缩进;如果这些是 C++ 地图,请注意在标签和主题行中。我们不想将这些与 Python 自己的map
函数混淆。
【参考方案1】:
您尚未将其设置为编译为 C++ 而不是 C。C 编译器将无法找到 C++ 标准库(因此出现“没有这样的文件或目录”错误)。
您需要通过设置 .pyxbld 文件来tell pyximport to use C++ instead of C。或者,您可以使用 setup.py in C++ mode 而不是 pyximport。
【讨论】:
以上是关于在 Cython 中使用 C++ STL 映射的主要内容,如果未能解决你的问题,请参考以下文章
在 ipython 中使用 Cython 包装 C++ 标准库
Visual C++ 2010 中的 STL 映射实现和线程安全