'ldd'에 의해“동적 실행 파일이 아님”으로보고 된 파일이 다른 라이브러리에 종속됩니까?


9

내가 이걸 제대로했는지 확인-전화

ldd /path/to/executable

"동적 실행 파일이 아님"을 반환합니다. 이것은 다른 라이브러리에 의존하지 않는다는 것을 의미합니다. 맞습니까? 그렇다면 종속성에 대해 걱정하지 않고 다른 우분투 상자로 전송할 수 있다는 의미입니까?

답변:


3

맞지만 고려해야 할 것이 있습니다.

로부터 ldd맨 :

ldd는 a.out 공유 라이브러리에서 작동하지 않습니다.

ldd는 ldd 지원이 컴파일러 릴리스에 추가되기 전에 작성된 매우 오래된 a.out 프로그램에서는 작동하지 않습니다. 이러한 프로그램 중 하나에서 ldd를 사용하면 프로그램은 argc = 0으로 실행을 시도하고 결과를 예측할 수 없습니다.


3
또 다른 이유는 바이너리가 32 비트 시스템 용으로 구축되었지만 64 비트 시스템에서 확인했기 때문일 수 있습니다.
Ferdinand Prantl

@FerdinandPrantl 32 비트 용으로 빌드 된 경우에도 32 비트 ldd종속성을 인쇄합니다.
Calmarius

기본 32 비트 libgcc1이없는 경우 @Calmarius는 사실이 아닙니다. 새로운 Ubuntu Server 설치에서 방금 확인 : 32 비트 바이너리에 ldd를 만족 시키려면 libgcc1 : i386을 설치해야합니다.
falstaff

1

@Calmarius는 정확합니다. 기본 32 비트 라이브러리조차없이 32 비트 exe를 고려하면 발생합니다.

내 시스템 (12.04에서 Ubuntu 16.04를 새로 설치)을 업그레이드하려고하는데 구식 32 비트 서비스를 설치해야하며 더 이상 avserver필요 ia32-libs하지 않습니다. 이 수단은 모두 dpkgapt-get불만이 (내가 할 무엇, 그것은 나를 메시지를 표시 apt-get -f install하고, 나는 그것을 실행하면, 내가 서비스 패키지를 제거 주장), 내 서비스가 시작되지 않습니다.

이것이 32 비트 라이브러리가 누락되었음을 증명하기 위해 기존 시스템 (Ubuntu 12.04 ia32-libs및 32 비트 라이브러리)을에 마운트 했습니다 /sda2. 보장 /opt에 장착 (내 32 비트 바이너리를 포함하는) /sda2/opt내가 할 수있는, chroot /sda2그리고 ldd다음 의도 한대로 실행됩니다.

이 문제를 해결하기 위해 모든 종속 라이브러리 패키지를 : i386 (arch)으로 수동으로 설치할 수있었습니다. 그러나 나는 의존성이 무엇인지 알아 내려고 시도하기보다는 와인을 설치했습니다 (주로 32 비트이므로 기본 라이브러리와 실제로 필요하지 않은 더 많은 부하를 설치하지만 괜찮습니다).

해결하려면 dpkgapt-getI 편집, /var/lib/dpkg/status내 서비스 패키지를 발견, 제거 ia32-libs. 지금 dpkgapt-get행복

다행스럽게도 다음과 같이 ldd행복하게보고합니다. root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)


와인을 설치하는 것은 필요한 모든 32 비트 라이브러리를 얻기위한 매우 영리한 기술입니다 !!
psitae
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.