【发布时间】:2015-01-19 04:59:27
【问题描述】:
我正在编写一些 python 代码,该代码使用 GDAL (http://www.gdal.org/) 及其 python 绑定从 ECW 文件中提取一些图像数据。 GDAL 是从源代码构建的,具有 ECW 支持。
该程序在我通过 ssh 连接到的集群服务器上运行。我已经通过 ssh 终端测试了该程序,它运行良好。但是,我现在想使用 qsub 向集群提交作业,但它报告以下内容:
Traceback (most recent call last):
File "./gdal-test.py", line 5, in <module>
from osgeo import gdal
File "/home/h3/ctargett/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/__init__.py", line 21, in <module>
_gdal = swig_import_helper()
File "/home/h3/ctargett/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/__init__.py", line 17, in swig_import_helper
_mod = imp.load_module('_gdal', fp, pathname, description)
ImportError: /mnt/aeropix/prgs/.local/lib/libgdal.so.1: undefined symbol: H5Eset_auto2
我做了更多的挖掘工作并尝试使用LD_DEBUG=symbols 来尝试找出不同之处,但就我的知识/理解而言,这差不多。
作为参考,下面是 LD_DEBUG=symbols 并在 ssh 终端中运行代码时发生的情况(通过 grep H5Eset_auto2 管道以减少一些输出):
在 ssh 终端中运行的代码的符号调试输出:
11359: symbol=H5Eset_auto2; lookup in file=/usr/bin/python26 [0]
11359: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpython2.6.so.1.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libpthread.so.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libdl.so.2 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libutil.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libm.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libc.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
11359: symbol=H5Eset_auto2; lookup in file=/home/h3/ctargett/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/_gdal.so [0]
11359: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpython2.6.so.1.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libgdal.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libstdc++.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libm.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libgcc_s.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libpthread.so.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libc.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libdl.so.2 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libutil.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7 [0]
11359: symbol=H5Eset_auto2; lookup in file=/usr/bin/python26 [0]
11359: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpython2.6.so.1.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libpthread.so.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libdl.so.2 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libutil.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libm.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libc.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
11359: symbol=H5Eset_auto2; lookup in file=/home/h3/ctargett/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/_gdal.so [0]
11359: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpython2.6.so.1.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libgdal.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libstdc++.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libm.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libgcc_s.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libpthread.so.0 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libc.so.6 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libdl.so.2 [0]
11359: symbol=H5Eset_auto2; lookup in file=/lib64/libutil.so.1 [0]
11359: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7 [0]
使用 qsub 提交的代码的符号调试输出:
16915: symbol=H5Eset_auto2; lookup in file=/usr/bin/python26 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpython2.6.so.1.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libpthread.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libdl.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libutil.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libm.so.6 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libc.so.6 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/home/h3/ctargett/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/_gdal.so [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpython2.6.so.1.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libgdal.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libstdc++.so.6 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libm.so.6 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libgcc_s.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libpthread.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libc.so.6 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libdl.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libutil.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libjpeg.so.62 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpng12.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libpq.so.4 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libcurl.so.3 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libgssapi_krb5.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libkrb5.so.3 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libk5crypto.so.3 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libcom_err.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libidn.so.11 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libssl.so.6 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libcrypto.so.6 [0]
16915: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libNCSEcw.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libNCSEcwC.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libNCSCnet.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libNCSUtil.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/librt.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libxml2.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/mnt/aeropix/prgs/.local/lib/libz.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libcrypt.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libresolv.so.2 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libnsl.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/usr/lib64/libkrb5support.so.0 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libkeyutils.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libselinux.so.1 [0]
16915: symbol=H5Eset_auto2; lookup in file=/lib64/libsepol.so.1 [0]
16915: /mnt/aeropix/prgs/.local/lib/libgdal.so.1: error: symbol lookup error: undefined symbol: H5Eset_auto2 (fatal)
ImportError: /mnt/aeropix/prgs/.local/lib/libgdal.so.1: undefined symbol: H5Eset_auto2
我想我不确定为什么在使用 qsub 提交时它似乎停止在 libgdal.so.1 中查找,而当它在终端中运行时继续查找。我还注意到 qsub 作业能够正确定位 libhdf5.so.7 (它应该在哪里找到 H5Eset_auto2 )因为它可以找到不同的符号 H5Eprint :
16915: symbol=H5Eprint; lookup in file=/usr/lib64/libpython2.6.so.1.0 [0]
16915: symbol=H5Eprint; lookup in file=/mnt/aeropix/prgs/.local/lib/libgdal.so.1 [0]
16915: symbol=H5Eprint; lookup in file=/usr/lib64/libstdc++.so.6 [0]
16915: symbol=H5Eprint; lookup in file=/lib64/libm.so.6 [0]
16915: symbol=H5Eprint; lookup in file=/lib64/libgcc_s.so.1 [0]
16915: symbol=H5Eprint; lookup in file=/lib64/libpthread.so.0 [0]
16915: symbol=H5Eprint; lookup in file=/lib64/libc.so.6 [0]
16915: symbol=H5Eprint; lookup in file=/lib64/libdl.so.2 [0]
16915: symbol=H5Eprint; lookup in file=/lib64/libutil.so.1 [0]
16915: symbol=H5Eprint; lookup in file=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7 [0]
在这个阶段,任何关于这方面的指示都会非常有用(我希望这些信息已经足够了——我很乐意提供更多信息,我只是不确定在这个阶段还有什么有用的)。
编辑:
对于使用qsub 提交的作业,/usr/bin 的内容似乎有所不同(特别是缺少libtool)。正在对此进行调查。
【问题讨论】:
-
当您以交互方式运行时以及在队列中运行时,查看环境变量
LD_LIBRARY_PATH可能会有所帮助。查找与 HDF5 相关的任何差异。 -
另一件事可能会帮助您调试:捕获 所有 作业脚本中的环境变量 (
env >$HOME/myenvs),然后重现相同的环境 (env $(xargs <$HOME/myenvs) bash) 并查看如果它以完全相同的方式失败。如果是这样,请检查并查找您的交互环境中的任何可疑差异。 -
这表明有两个独立的“进程”:第一个工作正常并且似乎使用相同的环境,而第二个没有并且似乎在“做自己的事情”(因此无法找到 HDF5)。
-
你还能检查
libtool是不是同一个版本? -
你能以交互方式和在队列中运行它并查看输出吗?他们应该产生完全相同的输出 - 我无法想象他们不会是这样,但我没有想法:\
nm -D /mnt/aeropix/prgs/.local/lib/libhdf5.so.7 | grep H5Eset_auto2
标签: linux linker cluster-computing python-2.6 gdal