Odpowiedzi:
Zgadza się, ale jest coś do wzięcia pod uwagę.
Z strony ldd
podręcznika:
ldd nie działa na bibliotekach współdzielonych a.out.
ldd nie działa z niektórymi bardzo starymi programami a.out, które zostały zbudowane przed dodaniem obsługi ldd do wydań kompilatora. Jeśli użyjesz ldd na jednym z tych programów, program spróbuje uruchomić z argc = 0, a wyniki będą nieprzewidywalne.
ldd
nadal drukuje zależności 32-bitowe.
@Calmarius ma rację, dzieje się tak, jeśli weźmiesz pod uwagę 32-bitowy exe, nawet bez podstawowych bibliotek 32-bitowych.
Próbuję zaktualizować swój system (nowa instalacja Ubuntu 16.04, od 12.04), muszę zainstalować starą zalecaną usługę 32-bitową avserver
, która wymaga ia32-libs
(już niedostępna). Oznacza to jedno dpkg
i drugie i apt-get
jest niezadowolony (cokolwiek robię, monituje mnie apt-get -f install
, a jeśli to uruchomię, nalega, że odinstaluję pakiet usług), a moja usługa się nie uruchomi.
Aby udowodnić, że przyczyną są brakujące biblioteki 32-bitowe, zamontowałem stary system (Ubuntu 12.04, z ia32-libs
bibliotekami 32-bitowymi) /sda2
. Zapewniając, że /opt
(zawierający mój 32-bitowy plik binarny) jest podłączony /sda2/opt
, mogę, chroot /sda2
a ldd
następnie uruchamiać zgodnie z przeznaczeniem.
Aby to naprawić, mogłem ręcznie zainstalować wszystkie zależne pakiety bibliotek za pomocą: i386 (arch). Jednak postanowiłem, zamiast próbować dowiedzieć się, jakie były moje zależności, zainstalowałem wino (które jest w większości 32-bitowe, więc instaluję podstawowe biblioteki i ładuję więcej, których tak naprawdę nie potrzebuję, ale nie mam nic przeciwko).
Aby to naprawić dpkg
i apt-get
edytowałem /var/lib/dpkg/status
, znajdując paczkę dla mojej usługi, i usunąłem ia32-libs
. Teraz dpkg
i apt-get
cieszymy się
Zrobione, ldd
szczęśliwie raporty: -
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)