2014-02-18 6 views
1

내 응용 프로그램이 찾을 수있는 기호에 대해 불만이 (㎚)이다 :기호 (LDD)를 찾을 수 없습니다,하지만

fatal: relocation error: file /foo/libxslt4c.so.113: symbol __1cDstdEcout_: referenced symbol not found (bar.c:1330) 

그리고 LDD 같은 말한다 :

ldd -d /bar/libxmllib.so 
     libc.so.1 =>  /lib/sparcv9/libc.so.1 
     [...] 
     libxml4c.so.58 =>  /foo/libxml4c.so.58 
     libxslt4c.so.113 =>  /foo/libxslt4c.so.113 
     [...] 
     /platform/SUNW,SPARC-Enterprise/lib/sparcv9/libc_psr.so.1 
     /lib/sparcv9/../libm/sparcv9/libm_hwcap1.so.2 
     symbol not found: __1cDstdEcout_    (/foo/libxslt4c.so.113) 
     symbol not found: __1cDstdEcerr_    (/foo/libxslt4c.so.113) 

그러나, 심볼이 있습니다. nm은 다음과 같이 말합니다 :

nm /foo/libxslt4c.so.113.0 | grep __1cDstdEcerr_ 
[10915] |     0|     0|OBJT |GLOB |0 |UNDEF |__1cDstdEcerr_ 

그러나 보시다시피 Shndx = UNDEF입니다. 그게 무슨 뜻 이죠? 나는 무언가가 정의되지 않았다면 전혀 존재하지 않는다고 생각했다. 하지만 어쨌든 거기에 있지만, 내 응용 프로그램은 그것을 찾을 수 없습니다.

시스템 : Solaris 10/UltraSPARC 내 응용 프로그램과 모든 라이브러리는 64 비트이고/foo는 LD_LIBRARY_PATH_64에 있습니다 (/ bar는 아닙니다).

편집 : 한편 UNDEF는 "다른 라이브러리에서 해결해야합니다."라는 것을 알고 있습니다. 또한 실제로 lib라는 기호가 _ 1cDstdEcerr 인 것을 발견했습니다. libCstd.so는/usr/lib에 있습니다. 또는 (64 비트 변형이 필요하기 때문에)/usr/lib/64보다 정확해야합니다. 그래서 이것은 crle로 보여지는 시스템의 기본 라이브러리 검색 패턴 중 하나에 있습니다. 이제 문제는 심볼을 포함하고있는 lib가 시스템의 검색 경로에있을 때 어떻게 심볼을 해석 할 수 없습니까?

+0

시스템은 'elfdump -d/bar/libxmllib.so'에 나열된 바와 같이 프로그램이나 공유 객체가 링크하는 심볼 만 라이브러리 경로의 모든 가능한 라이브러리에서 검색하지 않습니다. – alanc

답변

4

컴파일러에 전달한 플래그 에 링커를 포함시키지 않았기 때문에 해결되지 않은 것 같습니다. 당신이 당신의 메이크

LDFLAGS += -lCstd 

이 있다면

은, 그것은 함께 통과해야하고, 링커는 는 표준 편집을 $(LDFLAGS)를 추가 규칙을 사용하고있는 가정 (옳은 일을했을 것 컴파일러 및 링커 호출에 이르기까지).

+0

감사합니다. "내 응용 프로그램"은 실제로 IBM의 독점 소프트웨어입니다. 물론 LDFLAGS에 대해서는 잘 모르겠지만, 소프트웨어를 올바르게 구축했다고 확신합니다. 문제는 필자의 Solaris 환경입니다. – thorstenhirsch

+1

이 문제는 거의 솔라리스 환경이 아니라 응용 프로그램이 구축 된 방식입니다. 'elfdump -d/path/to/application'을 사용하여 응용 프로그램의 복잡한 내부 구조를 검사 할 수 있습니다. RUNPATH 또는 RPATH 항목은 libCstd.so를 찾는 위치를 파악하는 데 도움이됩니다. 때로는 (솔라리스에서 제대로 패키지되지 않은 GNU 소프트웨어로 이것을 보았습니다.) 당신은 runpath가 횡설수설이라는 것을 알 수 있습니다. 다행히도'elfedit' 유틸리티를 사용하여 이와 같은 문제를 해결할 수 있습니다. 솔라리스 링커 팀 중 한 명이이 툴에 대해 많은 글을 올렸습니다. 정말 도움이됩니다. http://goo.gl/RgxIy8 –

+0

당신 말이 맞습니다. IBM은이 문제를 해결하고 새로운 lib를 보냈습니다. 고마워요, 제임스! – thorstenhirsch