导入cython文件中的任何模块会产生未定义的符号错误

时间:2018-03-27 23:54:07

标签: python numpy cython

当我在使用cython编译的模块中使用任何 import语句时,我在导入模块时收到以下错误(请参阅下面的完整代码):

ImportError: /.../hw.cpython-35m-x86_64-linux-gnu.so: undefined symbol: __intel_sse2_strchr

在我自己的计算机上一切正常,但在尝试重新编译并在外部高性能计算机上运行脚本时出现此错误。

谷歌搜索我看到在几个地方弹出类似的错误,但在这些讨论中问题是与自己的代码中的错误有关,而不是导入的模块(例如Undefined symbol error importing Cython module)或建筑物出错cython或编译时间(例如Can cython be compiled with icc?)。我不知道如何将这些应用到我的案例中。

通过阅读其他讨论,我怀疑问题出在我的setup.py的制定中,但我真的不太了解 - 在我自己的系统上,标准的例子很简单。我尝试将numpy添加到设置中(请参阅下面的setup2.py),但这并没有解决问题 - 我在import hw上收到了同样的错误。

完整示例

hw.pyx:

import numpy  # without this line, the example works fine 

cpdef testfun():
    print("Hello world!")

setup.py:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize('hw.pyx'),
)

setup2.py:

from distutils.core import setup
from Cython.Build import cythonize
import numpy as np

setup(
    ext_modules = cythonize('hw.pyx'),
    include_dirs = [np.get_include()]  # -> including this doesn't make a difference
)

系统信息

外部系统运行python 3.5.2。我在virtualenv中运行我的代码,我有Cython 0.28.1。我尝试了numpy 1.13.0和1.14.2。对于此示例中的virtuel环境,我没有安装任何其他软件包(可能与我的问题无关,但pip freeze也列出了UNKNOWN==0.0.0

[重要编辑]

我收到了numpy的错误(因为我之前遇到了cdef np.ndarray我认为这是问题) - 但实际上是任何导入语句导致错误 - numpy恰好是第一个导入的模块。仍然不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

问题是我使用英特尔编译器而没有运行英特尔Python发行版,或以其他方式提供英特尔运行时库。

感谢@ead,我通过使用以下方式切换到GCC来解决问题:

CC=gcc python setup.py build_ext --inplace