재컴파일할 수 없고 패키지로 빌드되지 않은 실행 파일을 내 컴퓨터에 설치하고 이를 실행하는 데 필요한 라이브러리를 다운로드하고 싶습니다.
ldd
다음은 실행의 부분 출력입니다.
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)
이 정보를 사용하여 다운로드해야 할 패키지를 선택할 수 있는 도구가 있습니까? 아니면 나열된 라이브러리와 해당 종속성을 추출하여 디스크 사용량을 최소화하는 것이 더 나은가요? 시스템은 헤드리스 가상 머신에서 실행되며 프로그램은 VNC를 통해 표시됩니다.
전체 그래픽 데스크탑이 대부분의 필수 라이브러리를 제공할 것이라고 생각하지만 필요한 라이브러리, 해당 종속성 및 이를 지원하는 데 충분한 X Windows 패키지를 다운로드하고 싶습니다.
답변1
어떤 운영 체제를 사용하고 있는지 명시하지 않았으므로 Linux를 가정하고 데비안을 예로 들어 보겠습니다. 제가 아는 한, 귀하의 질문에 대한 빠른 대답은 '아니요'입니다. 그러나 이는 유용한 해결 방법이 될 수 있습니다.
ldd your_prog | awk '{print $1}' | sed 's/\..*//' |
while read n; do echo "----- $n ----"; apt-cache search ^$n; done
이는 ldd
출력을 구문 분석한 다음 실행 apt-cache
(운영 체제에 해당하는 것으로 대체)하여 이름과 설명에 가 포함된 패키지를 검색합니다 ldd
.
이렇게 하면 모든 결과를 찾을 수 없으며 일부(예: )에 대해 너무 많은 결과가 제공되지만 libc
도움이 될 수 있습니다.
apt-file
@FaheemMitha는 이것이 더 나은 접근 방식일 수 있다고 지적했습니다 . 예를 들어:
ldd /bin/bash | awk '/=>/{print $(NF-1)}' |
while read n; do apt-file search $n; done |
awk '{print $1}' | sed 's/://' | sort | uniq
그러면 연결된 라이브러리를 제공하는 패키지 이름 목록이 반환됩니다.
답변2
@terdon의 답변은 훌륭하지만 Debian 시스템에 기본적으로 설치된 다른 답변을 사용하면 dpkg-query
이를 달성하는 것이 훨씬 더 쉽습니다 .apt-file
ldd /bin/bash | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | uniq
그러면 패키지 목록이 생성됩니다.
답변3
가장 좋은 방법은 배포판을 실제로 지원하는 패키지를 찾는 것입니다. 하지만 그게 효과가 없다면 다른 방법을 알아요.
평소대로 ldd를 실행하고 이러한 종속성을 수동으로 설치하십시오.
예를 들어libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
나에게 그것은 apt-get install libpango:i386
데비안 안정 버전이 충분히 좋도록 설치하고 기도하는 것을 의미합니다.
ldd, Google의 모든 라인을 살펴보고 어떤 저장소가 사용 가능한지 확인해야 하며 기본적으로 운이 좋을 것입니다. 그런 다음 하나씩 설치하십시오. 프로그램이 실제로 실행될 때까지. 그러나 ldd는 "간단한" 프로그램에서만 작동합니다. 플러그인이나 임의의 코드를 실행하는 프로그램을 호출하는 것은 완전히 다른 일입니다. 이를 위해서는 콘솔에서 실행하고 충돌/오류가 발생할 경우 수정해야 합니다.
즉, 바이너리 전용 실행 파일은 유지 관리가 매우 어렵습니다. 다른 것을 사용하는 것을 고려해 볼 수도 있습니다. 배포판이 실행 파일이 구축된 시스템보다 약간 앞서거나 뒤처져 있다면 결코 작동하지 못할 수도 있습니다.