Как исправить ошибку поиска символа: неопределенные ошибки символов в среде кластера

Я работаю над некоторым кодом python, который извлекает некоторые данные изображения из файла ECW с помощью GDAL ( http://www.gdal.org/ ) и его привязок к python. GDAL был построен из источника для поддержки ECW.

Программа запускается на сервере кластеров, в который я вставляю ssh. Я протестировал программу через терминал ssh, и она работает нормально. Однако теперь я хотел бы отправить задание в кластер с помощью qsub, но он сообщает следующее:

Traceback (most recent call last): File "./gdal-test.py", line 5, in  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  _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 чтобы попытаться выяснить, в чем разница, но это касается того, насколько меня понимают мои знания / понимание.

Для справки, вот что происходит с LD_DEBUG=symbols и запуском кода в ssh-терминале ( grep H5Eset_auto2 через grep H5Eset_auto2 для уменьшения части вывода):

Отладочный вывод Symbol для кода, запущенного в 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 

Думаю, я не уверен, почему он, кажется, перестает искать в libgdal.so.1 при отправке с использованием qsub, когда он продолжает выглядеть, когда просто запускается в терминале. Я также отмечаю, что работа 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 самом деле символическая ссылка (с несколькими уровнями косвенности) на файл, который не был разделен между процессами очереди и интерактивными процессами. Это означает, что хотя сама символическая ссылка лежит на общей файловой системе, содержимое файла не работает, и в результате процесс видел разные версии библиотеки.

Для справок в будущем: кроме проверки LD_LIBRARY_PATH , всегда рекомендуется проверять библиотеку с nm -D чтобы увидеть, существуют ли символы на самом деле. В этом случае было обнаружено, что они существуют в интерактивном режиме, но не при запуске в очереди. Быстрый md5sum показал, что файлы были фактически разными.

 yum update 

помог мне. После того, как я

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