내 응용 프로그램이 찾을 수있는 기호에 대해 불만이 (㎚)이다 :기호 (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가 시스템의 검색 경로에있을 때 어떻게 심볼을 해석 할 수 없습니까?
시스템은 'elfdump -d/bar/libxmllib.so'에 나열된 바와 같이 프로그램이나 공유 객체가 링크하는 심볼 만 라이브러리 경로의 모든 가능한 라이브러리에서 검색하지 않습니다. – alanc