我正在尝试使用Python GDAL bindings。当通过pip天真地安装绑定时,安装会因error: 'VSIFTruncateL' was not declared in this scope而失败,可能是因为安装的标头和python绑定版本不匹配。 proposed solution elsewhere是通过pip安装完全相同的版本。但是,我的系统有gdal-1.7.3
,并且没有1.7.3绑定。安装1.7.1 bindings会导致编译成功,但尝试运行导致undefined symbol: GDALRasterBandGetVirtualMem
。因此,I installed 1.11.1 from source并编译了最新的绑定。编译和安装似乎有效,但导入不起作用:
In [2]: import osgeo
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-2-26b16a6d02ad> in <module>()
----> 1 import osgeo
/export/data/home/gholl/venv/gerrit/lib/python3.4/site-packages/osgeo/__init__.py in <module>()
19 fp.close()
20 return _mod
---> 21 _gdal = swig_import_helper()
22 del swig_import_helper
23 else:
/export/data/home/gholl/venv/gerrit/lib/python3.4/site-packages/osgeo/__init__.py in swig_import_helper()
15 if fp is not None:
16 try:
---> 17 _mod = imp.load_module('_gdal', fp, pathname, description)
18 finally:
19 fp.close()
/export/data/home/gholl/venv/gerrit/lib64/python3.4/imp.py in load_module(name, file, filename, details)
241 return load_dynamic(name, filename, opened_file)
242 else:
--> 243 return load_dynamic(name, filename, file)
244 elif type_ == PKG_DIRECTORY:
245 return load_package(name, filename)
ImportError: /export/data/home/gholl/venv/gerrit/lib/python3.4/site-packages/osgeo/_gdal.cpython-34m.so: undefined symbol: GDALRasterBandGetVirtualMem
我现在不知所措。我还可以尝试使用gdal
及其Python绑定吗?
(系统为Scientific Linux release 6.6 (Carbon)
,我没有系统管理员访问权限。)
答案 0 :(得分:7)
如果已经安装了gdal版本,即使您已链接到~/.local
中安装的版本,也会出现此问题。
解决方案在a Planet MYSQL post here:
在这种情况下,我们可以告诉链接器以这种方式在shell中预加载我们较新的1.11.0库:
export LD_PRELOAD=/usr/local/lib/libgdal.so.1
或者,就我而言,
export LD_PRELOAD="$HOME/.local/lib/libgdal.so.1"
确实,这解决了这个问题。
答案 1 :(得分:0)
我跑: export LD_PRELOAD = / usr / lib / libgdal.so.1 在pythod命令之前,它是固定的