'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하지 않습니다. 이 수단은 모두 dpkg와 apt-get불만이 (내가 할 무엇, 그것은 나를 메시지를 표시 apt-get -f install하고, 나는 그것을 실행하면, 내가 서비스 패키지를 제거 주장), 내 서비스가 시작되지 않습니다.

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

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

해결하려면 dpkg및 apt-getI 편집, /var/lib/dpkg/status내 서비스 패키지를 발견, 제거 ia32-libs. 지금 dpkg과 apt-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.