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

我正在编写一些python代码,使用GDAL从ECW文件中提取一些图像数据(http://www.gdal.org/)以及它的python绑定。GDAL是从源代码构建的,以获得ECW支持

该程序在我使用ssh连接到的集群服务器上运行。我已经通过ssh终端对程序进行了测试,运行良好。但是,我现在想使用qsub向集群提交作业,但它报告以下内容:

回溯(最近一次呼叫最后一次):
文件“/gdal test.py”,第5行,在<模块>
从osgeo导入gdal
文件“/home/h3/ctarget/.local/lib/python2.6/site packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/___init___.py”,第21行,in<模块>
_gdal=swig\u import\u helper()
swig_import_helper中的第17行文件“/home/h3/ctarget/.local/lib/python2.6/site packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/__init__uuuuuu.py”
_mod=imp.load_模块(“gdal”,fp,路径名,描述)
导入错误:/mnt/aeropix/prgs/.local/lib/libgdal.so.1:未定义的符号:H5Eset\u auto2

我做了更多的挖掘,并尝试使用LD_DEBUG=symbols来尝试找出差异所在,但这是我所掌握的知识/理解的范围

以下是使用LD_DEBUG=symbols并在ssh终端中运行代码(通过管道grep H5Eset_auto2减少一些输出)时发生的情况,以供参考:

ssh终端中运行的代码的符号调试输出:

11359:symbol=H5Eset\u auto2;在文件中查找=/usr/bin/python26[0]
11359:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpython2.6.so.1.0[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libpthread.so.0[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libdl.so.2[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libutil.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libm.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libc.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/ld-linux-x86-64.so.2[0]
11359:symbol=H5Eset_auto2;查找文件=/home/h3/ctarget/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo//u GDAL.so[0]
11359:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpython2.6.so.1.0[0]
11359:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libgdal.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/usr/lib64/libstdc++.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libm.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libgcc_.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libpthread.so.0[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libc.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libdl.so.2[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libutil.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7[0]
11359:symbol=H5Eset_auto2;在文件中查找=/usr/bin/python26[0]
11359:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpython2.6.so.1.0[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libpthread.so.0[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libdl.so.2[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libutil.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libm.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libc.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/ld-linux-x86-64.so.2[0]
11359:symbol=H5Eset_auto2;查找文件=/home/h3/ctarget/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo//u GDAL.so[0]
11359:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpython2.6.so.1.0[0]
11359:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libgdal.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/usr/lib64/libstdc++.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libm.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libgcc_.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libpthread.so.0[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libc.so.6[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libdl.so.2[0]
11359:symbol=H5Eset_auto2;查找文件=/lib64/libutil.so.1[0]
11359:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7[0]

使用qsub提交的代码的符号调试输出:

16915:symbol=H5Eset\u auto2;在文件中查找=/usr/bin/python26[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpython2.6.so.1.0[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libpthread.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libdl.so.2[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libutil.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libm.so.6[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libc.so.6[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/ld-linux-x86-64.so.2[0]
16915:symbol=H5Eset_auto2;查找文件=/home/h3/ctarget/.local/lib/python2.6/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo//u GDAL.so[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpython2.6.so.1.0[0]
16915:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libgdal.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libstdc++.so.6[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libm.so.6[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libgcc_.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libpthread.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libc.so.6[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libdl.so.2[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libutil.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7[0]
16915:symbol=H5Eset_auto2;在文件中查找=/usr/lib64/libjpeg.so.62[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpng12.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libpq.so.4[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libcurl.so.3[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libgssapi_krb5.so.2[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libkrb5.so.3[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libk5crypto.so.3[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libcom_err.so.2[0]
16915:symbol=H5Eset_auto2;在文件中查找=/usr/lib64/libidn.so.11[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libssl.so.6[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libcrypto.so.6[0]
16915:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libNCSEcw.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libNCSEcwC.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libNCSCnet.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libNCSUtil.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/librt.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libxml2.so.2[0]
16915:symbol=H5Eset_auto2;查找文件=/mnt/aeropix/prgs/.local/lib/libz.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/ld-linux-x86-64.so.2[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libcrypt.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libresolv.so.2[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libnsl.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/usr/lib64/libkrb5support.so.0[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libkeyutils.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libselinux.so.1[0]
16915:symbol=H5Eset_auto2;查找文件=/lib64/libsepol.so.1[0]
16915:/mnt/aeropix/prgs/.local/lib/libgdal.so.1:错误:符号查找错误:未定义符号:H5Eset_auto2(致命)
导入错误:/mnt/aeropix/prgs/.local/lib/libgdal.so.1:未定义的符号:H5Eset\u auto2

我想我不知道为什么它似乎停止在libgdal.so.1中查找,当使用qsub提交时,当它在终端中运行时继续查找。我还注意到qsub作业能够正确定位libhdf5.so.7(它应该在这里找到H5Eset\u auto2),因为它可以找到不同的符号,H5Eprint

16915:symbol=H5Eprint;查找文件=/usr/lib64/libpython2.6.so.1.0[0]
16915:symbol=H5Eprint;查找文件=/mnt/aeropix/prgs/.local/lib/libgdal.so.1[0]
16915:symbol=H5Eprint;查找文件=/usr/lib64/libstdc++.so.6[0]
16915:symbol=H5Eprint;查找文件=/lib64/libm.so.6[0]
16915:symbol=H5Eprint;查找文件=/lib64/libgcc_.so.1[0]
16915:symbol=H5Eprint;查找文件=/lib64/libpthread.so.0[0]
16915:symbol=H5Eprint;查找文件=/lib64/libc.so.6[0]
16915:symbol=H5Eprint;查找文件=/lib64/libdl.so.2[0]
16915:symbol=H5Eprint;查找文件=/lib64/libutil.so.1[0]
16915:symbol=H5Eprint;查找文件=/mnt/aeropix/prgs/.local/lib/libhdf5.so.7[0]

在这一阶段,任何关于这一点的建议都会非常有用(我希望这是足够的信息——我非常乐意提供更多信息,我只是不确定在这一阶段还有什么可能有用)

编辑:

对于使用qsub提交的作业,/usr/bin的内容似乎有所不同(特别是缺少libtool)。这件事正在调查中

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

为未来的r

发表评论