“ldd”报告为“不是动态可执行文件”的文件是否依赖于其他库?

只是确保我做对了 – 我打电话

ldd /path/to/executable 

它返回“不是动态可执行文件”。 这意味着它不依赖于其他库,对吗? 如果是这样,是否意味着它可以转移到另一个Ubuntu盒而不用担心依赖?

正确,但有一些事情需要考虑。

ldd页:

ldd不适用于a.out共享库。

ldd不适用于在将ldd支持添加到编译器版本之前构建的一些极其旧的a.out程序。 如果在其中一个程序上使用ldd,程序将尝试使用argc = 0运行,结果将无法预测。

@Calmarius是正确的,如果考虑32位exe,甚至没有基本的32位库,就会发生这种情况。

我正在尝试升级我的系统(全新安装的Ubuntu 16.04,从12.04开始),我必须安装一个旧的支持32位服务, avserver ,需要ia32-libs (不再可用)。 这意味着dpkgapt-get都不满意(无论我做什么,它都会提示我apt-get -f install ,如果我运行它,它坚持我卸载服务包),我的服务将无法启动。

为了certificate这是缺少32位库,我在/sda2上安装了我的旧系统(Ubuntu 12.04,带有ia32-libs和32位库)。 确保/opt (包含我的32位二进制文​​件)安装在/sda2/opt ,我可以chroot /sda2ldd然后按预期运行。

要解决这个问题,我可以手动安装所有依赖库包:i386(arch)。 然而,我决定而不是试图弄清楚我的依赖是什么,我安装了wine(大多数是32位,因此安装基本库和更多我不需要的负载,但我很好)。

为了修复dpkgapt-get ,我编辑了/var/lib/dpkg/status ,找到了我的服务包,并删除了ia32-libs 。 现在dpkgapt-get很高兴

完成后, ldd愉快地报道: – root@withnail:/opt/# 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//libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt//libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt//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)