【问题标题】:undefined _PyUnicodeUCS4_IsWhitespace in compiled cython+numpy已编译的 cython+numpy 中未定义的 _PyUnicodeUCS4_IsWhitespace
【发布时间】:2011-08-23 04:28:10
【问题描述】:

我在 ubuntu 10.04 上工作并使用 cython 编译我的 python 代码。 然后我尝试将我的 2 个二进制文件(一个带有 numpy,一个没有)复制到另一个支持内核的发行版等...我做的唯一不太酷的事情是我使用了该发行版附带的 python (2.6),然后从我的 ubuntu 复制 numpy 库。

当我执行没有 numpy 的那个时,它可以工作。当我使用'from numpy import ...'执行那个时,我收到一个错误,例如:undefined symbol: _PyUnicodeUCS4_IsWhitespace。 我认为刚刚为 UCS4 编译的 numpy 新 dist 中的 python 版本是 UCS2。但令我惊讶的是,当我使用 numpy 导入执行相同的 python 代码时——作为 python 而不是编译——它可以工作。

所以基本上我可以说,如果我打开“python”并导入 numpy 库,它就可以工作并且我可以使用它们。但如果我使用的是编译版本 - 我会收到 UCS4 错误.. 有什么想法吗?

(新的 dist 不在我的控制范围内,我真的不能在那个 dist 上编译我想要的任何东西)

谢谢。

【问题讨论】:

    标签: python numpy cython


    【解决方案1】:

    嗯,它是这样的:
    当运行 python 解释器并导入它尝试从 libpython.so 加载的 numpy 库时,符号 Python 被编译(我猜是这样)。这就是它与解释器一起工作的原因。所以对该 unicode 函数的请求不是来自 numpy - 而是来自 Python - 所以它使用它编译的 UCS2 函数(可能)。 但是当运行编译版本时,它再次尝试加载该函数 - 因为它搜索 UCS4 版本而找不到它。..

    我做了一个小检查:在 libpython、第一个 dist 和第二个 dist 中的 grep "_PyUnicode" - 不同的是:一个打印 UCS4 函数,另一个打印 UCS2 函数..

    所以我想这里的“简单”解决方案是在我的第一个 dist 上编译一个 UCS2 版本的 Python,然后将 Cython 设置为使用 UCS2 编译。我相信这会完成这项工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2015-02-27
      相关资源
      最近更新 更多