如何修复符号查找错误:集群环境中未定义的符号错误

我正在研究一些使用GDAL( http://www.gdal.org/ )和它的python绑定从ECW文件中提取一些图像数据的Python代码。 GDAL是从源头上build立起来的,有ECW的支持。

该程序运行在我使用的群集服务器上。 我通过SSHterminaltesting了程序,运行良好。 但是,现在我想使用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和在sshterminal中运行代码(通过grep H5Eset_auto2pipe道来减less一些输出):

在sshterminal中运行代码的符号debugging输出:

  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提交代码的符号debugging输出:

  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 

我想我不知道为什么它似乎停止查看libgdal.so.1使用qsub提交时,当它继续看在运行时在terminal。 我还注意到,qsub作业能够正确地findlibhdf5.so.7 (这是它应该findH5Eset_auto2 ),因为它可以find不同的符号, 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丢失)。 这正在调查中。

经过两libhdf5.so.7评论以了解情况,发现libhdf5.so.7实际上是一个符号链接 (具有几个间接级别) ,而不是在排队进程和交互进程之间共享的文件 。 这意味着即使符号链接本身位于共享文件系统上,文件的内容也不会,因此进程会看到不同版本的库。

为了将来的参考:除了检查LD_LIBRARY_PATH ,最好使用nm -D检查一个库是否实际存在。 在这种情况下,发现它们以交互模式存在,但在队列中运行时不存在。 一个快速的md5sum显示文件实际上是不同的。

 yum update 

帮助我。 我有了之后

 wget: symbol lookup error: wget: undefined symbol: psl_latest