2014-11-21 1 views
21

저는 GDAL (http://www.gdal.org/) 및 해당 python 바인딩을 사용하여 ECW 파일에서 일부 이미지 데이터를 추출하는 일부 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를 사용했지만, 그게 내 지식/이해가 나를 잡을 정도입니다. 코드

기호 디버그 출력이 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] 

는 참고로, 여기 LD_DEBUG=symbols으로 발생하고 (출력의 일부를 줄이기 위해 grep H5Eset_auto2을 통해 배관)는 SSH 터미널에서 코드를 실행하는거야

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을 사용하여 제출 ms는 libgdal.so.1을 qsub를 사용하여 제출할 때 멈추고, 터미널에서 실행될 때 계속해서 보입니다. 이에

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를 작업은 다른 기호, H5Eprint을 찾을 수 정확하게 (이 H5Eset_auto2을 발견해야하는 위치이다) libhdf5.so.7를 찾을 수 있습니다 (충분한 정보가 있기를 바랍니다. 더 많은 정보를 제공하게되어 기쁘게 생각합니다.이 단계에서 유용 할 수있는 것이 무엇인지 모르겠습니다.)

편집 :

/usr/bin의 내용이 qsub을 사용하여 제출 된 작업에 대한 다른 (특히 libtool가없는) 것 같다. 이것은 조사 중입니다. 댓글이 수십 상황을 이해 한 후

+1

대화식으로 실행 중일 때와 대기열에서 실행 중일 때 환경 변수'LD_LIBRARY_PATH'를 살펴 보는 것이 도움이 될 것입니다. HDF5와 관련된 불일치가 있는지 확인하십시오. – Rufflewind

+0

나는 그렇게 생각하지 않는다. 나는 그보다 더 많은 일이있을 것이라고 생각한다. 나는'libhdf5.so.7'가'H5Eset_auto2'에서 멈추기 전에 심볼'H5Eprint'를 정확하게 찾을 수 있다는 것을 알고 있습니다. 최소한의 작업 예제로서'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

관련 문제