我成功安装了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
答案 0 :(得分:3)
问题是libstdc++
中的dual ABI与std::string
和std::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
您的选择是:
conda install gcc
)安装gcc并使用它构建pyopencl。不幸的是,如果你的PATH
上有Anaconda,你将在任何地方使用他们的gcc。libstdc++
中的~/anaconda3/lib
:cd ~/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问题。