gpt4 book ai didi

linux - 如何修复符号查找错误 : undefined symbol errors in a cluster environment

转载 作者:IT老高 更新时间:2023-10-28 12:41:00 25 4
gpt4 key购买 nike

我正在编写一些 python 代码,该代码使用 GDAL (http://www.gdal.org/) 及其 python 绑定(bind)从 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]

在这个阶段,任何关于这方面的指示都会非常有用(我希望这些信息已经足够了——我很乐意提供更多信息,我只是不确定在这个阶段还有什么有用的)。

编辑:

似乎 /usr/bin 的内容对于使用 qsub 提交的作业不同(特别是缺少 libtool)。正在对此进行调查。

最佳答案

经过两打注释了解情况,发现libhdf5.so.7其实是一个symlink(有几级间接)到< em>队列进程和交互进程之间未共享的文件。这意味着即使符号链接(symbolic link)本身位于共享文件系统上,文件的内容也不存在,因此进程会看到不同版本的库。

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

关于linux - 如何修复符号查找错误 : undefined symbol errors in a cluster environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27054737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com