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


11

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

다음은 실행 출력의 일부입니다 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 패키지 만 다운로드하려고합니다.


1
어떤 OS? 패키지와 패키지 이름 및 패키지 관리자는 배포판간에 변경됩니다 (이는 일종의 Linux를 실행한다고 가정합니다).
terdon

이 경우 데비안과 우분투입니다
vfclists

이 경우 내 대답이 효과가 있습니다.
terdon

사실 나는 뒤늦게 테스트하려고한다. 나는 그것을 잊어 버렸고 비슷한 질문을
했는데이

답변:


14

어떤 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

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


1
apt-file search화살표 오른쪽에있는 실제 파일이 더 효과적 일 수 있습니다.
Faheem Mitha

@FaheemMitha 매우 좋은 지적, 감사합니다. 답변이 수정되었습니다.
terdon

다운로드해야 할 라이브러리를 찾기 위해 시스템에 라이브러리가 있는지 테스트하도록 명령을 어떻게 조정할 수 있습니까? 나는 최근에 물어 본 질문이 그 선을 따른다고 생각한다. 다시 열어야합니다.
vfclists

@vfclists는 그만한 가치가 없으며, apt-get install그들 모두와 이미 설치된 것은 무시됩니다.
terdon

빠른 다운로드를 위해 불필요한 라이브러리가없는 VM을 생성하기 때문입니다. 패키지 설치에는 불필요한 항목이 많이 포함되어 있으며 실행 파일에 필요한 라이브러리 파일과 그 종속성 만 필요하며 내 bash 및 Linux 기술을 연마 할 수있는 기회도 제공합니다. 파이썬이 없습니다.
vfclists

3

@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

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


1

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.