이 명령을 사용할 때 다음과 같은 ldd
옵션이 있습니다 .-u
사용되지 않은 직접 종속성을 인쇄합니다.
온라인 도움말에 설명된 대로입니다.
예를 들어:
ldd -u /bin/gcc
Unused direct dependencies:
/lib64/libm.so.6
/lib64/ld-linux-x86-64.so.2
"사용되지 않은 직접 종속성"이란 무엇입니까? 왜 그들은사용되지 않음? 왜 그들은종속성?
답변1
바이너리는 이를 동적 섹션에 "NEEDED" 항목으로 종속성으로 나열하기 때문에 종속성입니다.
readelf -d /usr/bin/gcc
도서관의 요청이 표시됩니다 gcc
.
gcc
관련 라이브러리에서 내보낸 기호는 실제로 필요하지 않기 때문에 사용되지 않습니다 . s 에 관한 한 ld-linux-x86-64.so.2
이는 통역사이기 때문에 정상입니다. libm
이런 경우는 대개 무조건적으로, 아니오로 수행 됩니다 -lm
.사용하지 않는 라이브러리를 제거하기 위한 해당 링커 옵션.
많은 경우 이는 특히 링크와 같은 빌드 도구의 세분성이 제한되어 있기 때문입니다.예를 들어그놈 라이브러리는 직접 종속성으로 항상 필요하지는 않지만 결국 라이브러리 종속성 트리에 포함되는 긴 라이브러리 목록을 생성하는 경향이 있습니다. 일반적으로 사용되지 않는 종속성을 방지하여 종속성 처리를 단순화하는 것이 가장 좋습니다(런타임 링커 및 패키지 관리 도구를 통해). 하지만 libm
어쨌든 관련성이 있으므로 무시해도 안전합니다 libc
.