Answers:
正确,但需要考虑一些因素。
从ldd
联机帮助页:
ldd在a.out共享库上不起作用。
ldd不能与在将ldd支持添加到编译器版本之前构建的某些非常老的a.out程序一起使用。如果在这些程序之一上使用ldd,该程序将尝试以argc = 0运行,并且结果将不可预测。
ldd
仍会打印32位依赖项。
@ Calmarius是正确的,如果您考虑使用32位exe,甚至没有基本的32位库,就会发生这种情况。
我试图升级我的系统(从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)手动安装所有从属库软件包。但是,我决定而不是试图弄清我的依赖性是什么,而是安装了wine(它主要是32位的,因此安装了基本库并加载了一些我并不需要的负载,但是我可以接受)。
要解决dpkg
和apt-get
,我编辑/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)