실행 파일을 지원하기 위해로드 할 패키지 또는 라이브러리를 결정하는 방법이 있습니까? 않은 재

패키지로 빌드되지 않은 재 컴파일 할 수없는 컴퓨터에 설치하려는 실행 파일이 있으며이를 실행하는 데 필요한 라이브러리를 다운로드하려고합니다.

다음은 실행 출력의 일부입니다 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)

디스크 사용을 최소화하기 위해이 정보를 사용하여 다운로드 할 패키지를 선택하거나 나열된 라이브러리와 해당 종속성 만 추출 할 수있는 도구가 있습니까? 시스템이 헤드리스 VM에서 실행되고 있으며 프로그램은 VNC를 통해 표시됩니다.

완전한 그래픽 데스크탑이 필요한 대부분의 라이브러리를 제공 할 것으로 생각되지만 필요한 라이브러리, 해당 종속성 및이를 지원하기에 충분한 X Windows 패키지 만 다운로드하려고합니다.



답변

어떤 OS를 사용하고 있는지 말하지 않았으므로 Linux를 가정하고 데비안을 예로 사용합니다. 귀하의 질문에 대한 빠른 답변은 내가 아는 한 아닙니다. 이것은 유용한 해결 방법 일 수 있습니다.

ldd your_prog | awk '{print $1}' | sed 's/\..*//' |
  while read n; do echo "----- $n ----"; apt-cache search ^$n; done

그러면 ldd출력 을 구문 분석 한 다음 실행 apt-cache(OS와 동등한 것으로 대체)하여 이름과 설명에 의해 반환 된 라이브러리 이름의 첫 부분이 포함 된 패키지의 저장소를 검색합니다 ldd.

이것으로 모든 것을 찾을 수는 없으며 일부와 같은 결과가 너무 많을 libc수도 있지만 도움이 될 수 있습니다.


@FaheemMitha는 apt-file더 나은 방법 일 수 있다고 지적했습니다 . 예를 들면 다음과 같습니다.

ldd /bin/bash | awk '/=>/{print $(NF-1)}'  |
 while read n; do apt-file search $n; done |
  awk '{print $1}' | sed 's/://' | sort | uniq

연결된 라이브러리를 제공하는 패키지 이름 목록이 반환됩니다.


답변

@terdon의 대답은 훌륭하지만 데비안 시스템에 기본적으로 설치된 dpkg-query것과 다른 것을 사용 하여이 작업을 수행하는 것이 훨씬 쉽습니다 apt-file.

ldd /bin/bash | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | uniq

패키지 목록이 생성됩니다.


답변

가장 좋은 방법은 실제로 배포를 지원하는 패키지를 찾는 것입니다. 그러나 그것이 당신을 위해 작동하지 않으면 나는 다른 방법을 알고 있습니다.

그대로 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는 “간단한”프로그램에서만 작동합니다. 플러그인을 호출하거나 임의의 코드를 실행하는 프로그램은 서로 다른 문제입니다. 이를 위해 콘솔에서 실행하고 충돌 / 오류가 발생할 때이를 수정해야합니다.

즉, 바이너리 전용 실행 파일은 유지 관리하기가 매우 어렵습니다. 다른 것을 사용하는 것이 좋습니다. 배포판이 실행 파일을 빌드 한 시스템보다 약간 앞서 있거나 약간 뒤에 있으면 작동하지 않을 수 있습니다.