2014-11-21 2 views
21

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

Программа запускается на сервере кластеров, в который я попал. Я протестировал программу через терминал 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 и выполнением кода в терминальном (трубопроводе через grep H5Eset_auto2, чтобы уменьшить часть продукции):

Symbol выхода для отладки коды, выполняемым в терминальном:

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] 

Symbol выход для отладки кода, представляемая с помощью 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 

Я предполагаю, что я не знаю, почему это увидеть ms, чтобы перестать искать в 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] 

Все указатели на это было бы невероятно полезно на данном этапе (Надеюсь, это достаточно информации - я более чем счастлив предоставить больше информации, я просто не уверен, что еще может быть полезно на данном этапе).

EDIT:

кажется, что содержание /usr/bin различны для заданий, отправляемых с помощью qsub (в частности libtool отсутствует). Это исследуется.

+1

Одна вещь, которая может помочь, чтобы посмотреть на окружающую среду переменную 'LD_LIBRARY_PATH', когда вы работаете в интерактивном режиме, и когда он работает в очереди. Ищите любые расхождения, связанные с HDF5. – Rufflewind

+0

Я так не думаю, я думаю, что может произойти нечто большее. Я знаю, что работа qsub может найти 'libhdf5.so.7', поскольку она правильно находит символ' H5Eprint', прежде чем застрять на 'H5Eset_auto2' Как минимум рабочий пример, единственная строка' from osgeo import gdal' работает, когда я запускаю это через терминал ssh, но с ошибкой при отправке с использованием qsub. Кроме того, я установил 'export LD_LIBRARY_PATH =/mnt/aeropix/prgs/.local/lib' (где находится' libhdf5.so.7') – agnussmcferguss

+0

У меня пока нет ответа, но если вы посмотрите на первый вывод (интерактивный), обратите внимание, что строки состоят из двух одинаковых групп, один из которых повторяется один за другим. Однако на втором выходе (в системе очереди) первая группа строк одна и та же, но вторая группа строк выглядит совсем по-другому. – Rufflewind

ответ

15

После двух десятков комментариев, чтобы понять ситуацию, было установлено, что libhdf5.so.7 был на самом деле символическая (с несколькими уровнями косвенности) до файла, который не разделяет между очередью процессами и интерактивными процессами , Это означает, что хотя сама символическая ссылка лежит на общей файловой системе, содержимое файла не работает, и в результате процесс видел разные версии библиотеки.

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

+1

Также обратите внимание, что, следуя символическим ссылкам, не забудьте следить за ними, пока не достигнете конца. – agnussmcferguss

1
yum update 

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

wget: symbol lookup error: wget: undefined symbol: psl_latest 
+0

Грязные и рабочие "взломать") – Andriy