在 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++ 标准库

如何在 Cython 中使用不同的 C++ 编译器?

Visual C++ 2010 中的 STL 映射实现和线程安全

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

如何在 python 包装中使用 unicode 字符串用于带有 cython 的 c++ 类?

在 C++ 中嵌入 Cython