2017-02-07 9 views
0

Readelf 보고서에서 어떤 기능 (또는 다른 기호)이 libutil.so.1는 ssh를 유틸리티에 의해 필요, 사용되지 않는 :readelf 보고서는 이렇게 파일하지만

말한다 나노
$readelf -s /usr/bin/ssh | grep libutil 
0x0000000000000001 (NEEDED)    Shared library: [libutil.so.1] 

으로, libutil을. so.1 만 6 외부 기호가 있습니다

$nm -D /lib64/libutil.so.1 | grep "T " 
000000331e0015a0 T forkpty 
000000331e000fa0 T login 
000000331e0010f0 T login_tty 
000000331e001190 T logout 
000000331e0012e0 T logwtmp 
000000331e0013d0 T openpty 

그러나 SSH에서 참조되지 이러한 기호 :

$nm -D /usr/bin/ssh | grep forkpty 
$nm -D /usr/bin/ssh | grep login 
$nm -D /usr/bin/ssh | grep login_tty 
$nm -D /usr/bin/ssh | grep logout 
$nm -D /usr/bin/ssh | grep logwtmp 
$nm -D /usr/bin/ssh | grep openpty 

(grep not showing any matches) 

을 무슨 일이야? 라이브러리가 NEEDED로 참조 된 이유는 무엇입니까? 이것은 유일한 예가 아닙니다. 다른 실행 파일의 종속성을 분석하는 동안 많은 "빈"참조를 만났습니다.

+0

이 앱을 제작 한 배포판은 무엇입니까? – yugr

+0

배포판은 Red Hat 6.6 이었지만 중요하지 않다고 생각합니다. – spacistor

+0

현대 배포판에서는'--as-needed'가 기본적으로 활성화되어 있으므로 문제를 해결하기 위해'--no-as-needed'를 사용해야합니다. 레드햇 6은 (그냥 확인해도) 제정신 인 것 같습니다. – yugr

답변

2

DT_NEEDED 태그는 제공된 -l 플래그를 기반으로 링크 편집기 (ld)에 의해 생성됩니다. GNU 링크 편집기와 다른 대부분의 편집기의 기본값은 예외가 있지만 각 -l 플래그에 대해 DT_NEEDED 태그를 작성하는 것입니다. GNU ld 또는 gold를 사용하는 경우

만 실제로 사용되는 라이브러리 DT_NEEDED 태그를 방출하는 -l 플래그 전에 --as-needed를 전달할 수 있습니다. 기호가 실제로 간접적으로 사용되는 경우 이는 분명하지 않은 태그를 방출 할 수 있습니다.

나는 실제로 --as-needed에 대한 상당한 금액을 기록했으며 어떻게 작동하는지 궁금해 할 때 my blog posts을 통해 볼 수 있습니다.

+0

"GNU 링크 편집기의 기본값은 DT_NEEDED 태그를 만드는 것입니다"- 모든 현대 배포판 (Ubuntu, Fedora, OpenSuse)에서 기본적으로 활성화되어 있지 않은가? – yugr

+0

그들 모두를 말할 수는 없지만 Gentoo Linux에서는 아직 디폴트로 활성화되어 있지 않습니다. 적어도 비 소프트 버전에는 없습니다. 나는 그것이 '금색'에 있을지도 모른다라고 생각한다. –