2017-11-27 30 views
0

저는 파이썬 인터프리터 및 일부 라이브러리가 제작에 포함 된 사내 Python 프로그램을 보유하고 있습니다. RHEL 6 환경에서 올바르게 작동합니다.RHEL 환경에서 세그먼트가 잘못됨 7.4 (RHEL 6에서 작동)

그러나 RHEL 7.4에서는 세그먼트 오류가 발생합니다. 시스템 라이브러리가 응용 프로그램 라이브러리 libxml2에 의해 오버 라이드 된 것으로 의심됩니다.

역 추적 : 나는 응용 프로그램 LIB 폴더에 RHEL 7.4에 대한 최신 라이브러리 (libxml2를)를 추가이 1로이 개 솔루션을 가정하고

(gdb) backtrace 
#0 0x00007ffff7228e00 in __strncmp_sse42() from /lib64/libc.so.6 
#1 0x00007ffff03b3a48 in __xmlParserInputBufferCreateFilename (URI=0x9c7f3c "/opt/monitor/tools/etc/pmonspec.xml", enc=XML_CHAR_ENCODING_NONE) at xmlIO.c:2476 
#2 0x00007ffff038cd44 in xmlNewInputFromFile__internal_alias (ctxt=0xa012a0, filename=0x9c7f3c "/opt/monitor/tools/etc/pmonspec.xml") at parserInternals.c:1463 
#3 0x00007ffff03b59a2 in xmlDefaultExternalEntityLoader (URL=0x9c7f3c "/opt/monitor/tools/etc/pmonspec.xml", ID=0x0, ctxt=0xa012a0) at xmlIO.c:3832 
#4 0x00007ffff085d722 in __pyx_f_4lxml_5etree__local_resolver (__pyx_v_c_url=0x9c7f3c "/opt/monitor/tools/etc/pmonspec.xml", __pyx_v_c_pubid=0x0, __pyx_v_c_context=0xa012a0) 
    at src/lxml/lxml.etree.c:63618 
#5 0x00007ffff03a4bd0 in xmlCtxtReadFile__internal_alias (ctxt=0xa012a0, filename=0x9c7f3c "/opt/monitor/tools/etc/pmonspec.xml", encoding=0x0, options=83970) at parser.c:14487 
#6 0x00007ffff08754b4 in __pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile (__pyx_v_self=0x7b6640, __pyx_v_c_filename=0x9c7f3c "/opt/monitor/tools/etc/pmonspec.xml") 
    at src/lxml/lxml.etree.c:68146 
#7 0x00007ffff083316f in __pyx_f_4lxml_5etree__parseDocFromFile (__pyx_v_filename8=0x9c7f18, __pyx_v_parser=0x7b6640) at src/lxml/lxml.etree.c:71175 
#8 0x00007ffff0833239 in __pyx_f_4lxml_5etree__parseDocumentFromURL (__pyx_v_url=0x7fffffffda14, __pyx_v_parser=0x7fff00000000) at src/lxml/lxml.etree.c:72080 
#9 0x00007ffff0885768 in __pyx_f_4lxml_5etree__parseDocument (__pyx_v_source=0x9c7f18, __pyx_v_parser=0x66d2b0 <_Py_NoneStruct>, __pyx_v_base_url=0x66d2b0 <_Py_NoneStruct>) 
    at src/lxml/lxml.etree.c:71797 
#10 0x00007ffff08863aa in __pyx_pf_4lxml_5etree_12_ElementTree_parse (__pyx_v_self=0x9cc170, __pyx_args=<optimized out>, __pyx_kwds=<optimized out>) at src/lxml/lxml.etree.c:39625 
#11 0x00000000004a0476 in call_function (pp_stack=<optimized out>, oparg=<optimized out>) at Python/ceval.c:4012 
#12 PyEval_EvalFrameEx (f=0x7f7170, throwflag=<optimized out>) at Python/ceval.c:2665 
#13 0x00000000004a1f74 in PyEval_EvalCodeEx (co=0x7ffff7ee63b0, globals=<optimized out>, locals=<optimized out>, args=0x0, argcount=0, kws=0x0, kwcount=0, defs=0x0, defcount=0, closure=0x0) 
    at Python/ceval.c:3252 
#14 0x00000000004a20f2 in PyEval_EvalCode (co=0x7fffffffda14, globals=0x7fff00000000, locals=0x4) at Python/ceval.c:666 
#15 0x00000000004c4e90 in run_mod (mod=<optimized out>, filename=<optimized out>, globals=0x7fff00000000, locals=0x4, flags=<optimized out>, arena=<optimized out>) at Python/pythonrun.c:1346 
#16 PyRun_FileExFlags (fp=0x776630, filename=0x7fffffffe615 "/opt/monitor/tools/bin/pmon_my", start=<optimized out>, globals=0x6f2140, locals=0x6f2140, closeit=1, flags=0x7fffffffe1ac) 
    at Python/pythonrun.c:1332 
#17 0x00000000004c6109 in PyRun_SimpleFileExFlags (fp=0x776630, filename=0x7fffffffe615 "/opt/monitor/tools/bin/pmon_my", closeit=1, flags=0x7fffffffe1ac) at Python/pythonrun.c:936 
#18 0x000000000041462c in Py_Main (argc=<optimized out>, argv=0x7fffffffe358) at Modules/main.c:599 
#19 0x00007ffff7114c05 in __libc_start_main() from /lib64/libc.so.6 
#20 0x0000000000413aba in _start() 

. 그렇다면 파이썬이 그것을 어떻게 사용하는지 이해하는 방법은 무엇입니까? 2. 시스템을 사용하는 대신 응용 프로그램 lib 폴더를 조사하도록 라이브러리 검색, 연결 및로드를 다시 시도하십시오.

다음 변경과 관련이 있습니까?

버그 1292230 - LD는 놀랍게도 오류를 제공하지 않습니다 추적 - 어린이 옵션 Valgrind의에서 프로그램을 실행 라이브러리

에 연결 심볼가 해결되지 않습니다.

+2

RHEL 6 상자에서 python 바이너리를 가져 와서 RHEL 7에서 실행할 수 없다고 확신합니다. 바이너리는 RHEL에 설치되지 않을 SO에 대해 빌드 및 링크되었습니다 7. ABI 호환성이 깨지지 않았 으면 작동 할 수도 있지만 권장하지는 않습니다. – wholevinski

+0

RHEL 7.x 시스템에서 소스 코드와 종속성을 다시 컴파일하면 문제가 없습니다. – OptimusCrime

답변

0

응용 프로그램이 bug fixed in 2010의 영향을받는 libxml2의 비공개 구식 버전을 사용하고 있습니다. 문제가 발생했는지 여부는 zlib의 특정 버전에 달려있는 것으로 보입니다. libxml2 2.7.7 이상으로 업그레이드해야합니다. 정적으로 libxml2에 링크하면 응용 프로그램을 다시 컴파일하는 것 외에 다른 방법이 없습니다. 나는 당신의 시스템 libxml2에 동적으로 링크 할 것을 제안한다.

+0

/usr/lib64/libxml2.so.2의 시스템 라이브러리를 가리 키도록 응용 프로그램 폴더의 심볼릭 링크를 리디렉션했습니다. 이걸로 잘 작동합니다. – Ehteshaam

0

/usr/lib64/libxml2.so.2의 시스템 라이브러리를 가리 키도록 응용 프로그램 폴더의 심볼릭 링크를 리디렉션했습니다. 이것으로 잘 작동합니다.