【问题标题】:pyopencl import error cffi.so undefined symbolpyopencl 导入错误 cffi.so 未定义符号
【发布时间】:2016-12-12 07:52:19
【问题描述】:

我成功安装了 pyopencl,但出现导入错误。我被困在这里,无法进一步进步。任何帮助将不胜感激


ImportError Traceback(最近一次调用最后一次) 在 ()

  5 from __future__ import division

  6 import numpy as np

----> 7 导入pyopencl

  8 import pyopencl.array

  9 import math, time 

/home/highschool/anaconda2/lib/python2.7/site-packages/pyopencl-2016.2-py2.7-linux-x86_64.egg/pyopencl/init.py in () 32

 33 try: 

---> 34 import pyopencl.cffi_cl as _cl

 35 except ImportError:

 36     import os

/home/highschool/anaconda2/lib/python2.7/site-packages/pyopencl-2016.2-py2.7-linux-x86_64.egg/pyopencl/cffi_cl.py in ()

 37 from pytools import memoize_method

 38 

---> 39 from pyopencl._cffi import ffi as _ffi

 40 from .compyte.array import f_contiguous_strides, c_contiguous_strides

 41 

ImportError:/home/highschool/anaconda2/lib/python2.7/site-packages/pyopencl-2016.2-py2.7-linux-x86_64.egg/pyopencl/_cffi.so:未定义符号:_ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE

【问题讨论】:

    标签: pyopencl


    【解决方案1】:

    问题是libstdc++ 中的dual ABI 带有gcc5.1 用于std::stringstd::list。 Anaconda 现在安装 libstdc++.so.6.0.19(可能是因为他们添加了一个带有 C++ 库的 Python 包)from gcc 4.8.3 and pre dual ABI,而 Ubuntu 16.04 带有 gcc 5.4 和 libstdc++.6.0.21。当您构建 pyopencl 时,它会构建并链接到您的系统 libstdc++ 但是当您尝试导入 pyopencl 时,它会动态链接到 Anaconda 并且无法找到符号。

    应该可以通过将-D_GLIBCXX_USE_CXX11_ABI=0 添加到pyopencl siteconf.py 中的CXXFLAGS 列表来解决这个问题。这解决了std::string 问题,但还缺少其他符号:

    ImportError: /home/cryan/anaconda3/lib/python3.6/site-packages/pyopencl-2016.2.1-py3.6-linux-x86_64.egg/pyopencl/_cffi.abi3.so: undefined symbol: _ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEEPFvvE
    

    您的选择是:

    1. 从 Anaconda (conda install gcc) 安装 gcc 并使用它构建 pyopencl。不幸的是,如果您的 PATH 上有 Anaconda,您将在任何地方使用他们的 gcc。
    2. 只需删除/重命名~/anaconda3/lib 中的libstdc++cd ~/anaconda3/lib; mv libstdc++.so libstdc++.annoying; mv libstdc++.so.6 libstdc++.annoying.6。 Python 模块会找到你的系统,它应该是向后兼容的。

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的同样的问题。

      ImportErrorTraceback (most recent call last)
      <ipython-input-1-f1779268ba42> in <module>()
      ----> 1 import pyopencl as cl
      
      /opt/anaconda2/lib/python2.7/site-packages/pyopencl/__init__.py in <module>()
           32 
           33 try:
      ---> 34     import pyopencl.cffi_cl as _cl
           35 except ImportError:
           36     import os
      
      /opt/anaconda2/lib/python2.7/site-packages/pyopencl/cffi_cl.py in <module>()
           37 from pytools import memoize_method
           38 
      ---> 39 from pyopencl._cffi import ffi as _ffi
           40 from .compyte.array import f_contiguous_strides, c_contiguous_strides
           41 
      
      ImportError: /opt/anaconda2/lib/python2.7/site-packages/pyopencl/_cffi.so: undefined symbol: _ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE
      

      我在 Ubuntu 16.04 上,使用 AMDAPPSDK-3.0 中的 libOpenCL.so。我能够运行这个 SDK 中包含的一些 OpenCL 示例,所以我相信这是一个 pyopencl 问题。

      【讨论】:

      • 我也在使用 ubuntu 16.04,我可以在 14,04 中安装它。我重新安装了 pyopencl 但没有运气。
      猜你喜欢
      • 2023-04-09
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2019-04-19
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多