pyopencl import error cffi.so undefined symbol

时间:2016-12-12 07:52:20

标签: pyopencl

我成功安装了pyopencl,但是我收到导入错误。我被困在这里,无法继续前进。任何帮助将不胜感激

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

  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将pyopencl.cffi_cl导入为_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来自pyopencl._cffi导入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:undefined symbol:_ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE

2 个答案:

答案 0 :(得分:3)

问题是libstdc++中的dual ABIstd::stringstd::list的gcc5.1。 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 CXXFLAGS中的siteconf.py列表来解决此问题。这解决了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. 只需删除/重命名libstdc++中的~/anaconda3/libcd ~/anaconda3/lib; mv libstdc++.so libstdc++.annoying; mv libstdc++.so.6 libstdc++.annoying.6。 Python模块将找到一个应该向后兼容的系统。

答案 1 :(得分:0)

我有完全相同的问题。

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问题。