【问题标题】:Python gdal undefined symbol GDALRasterBandGetVirtualMemPython gdal 未定义符号 GDALRasterBandGetVirtualMem
【发布时间】:2014-11-24 23:52:55
【问题描述】:

我正在尝试使用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),我没有系统管理员访问权限。)

【问题讨论】:

    标签: python gdal


    【解决方案1】:

    如果已经安装了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"
    

    确实,这解决了问题。

    【讨论】:

    • 这救了我的命。无法摆脱 GDAL 源安装的所有剩余部分,几乎发疯了。非常感谢!
    【解决方案2】:

    我跑: 导出 LD_PRELOAD=/usr/lib/libgdal.so.1 在 pythod 命令之前,它是固定的

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 2015-01-24
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多