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


9

只要确保我说对了-我打电话

ldd /path/to/executable

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

Answers:


3

正确,但需要考虑一些因素。

ldd联机帮助页:

ldd在a.out共享库上不起作用。

ldd不能与在将ldd支持添加到编译器版本之前构建的某些非常老的a.out程序一起使用。如果在这些程序之一上使用ldd,该程序将尝试以argc = 0运行,并且结果将不可预测。


3
另一个原因可能是二进制文件是为32位系统构建的,但是您正在64位系统上进行检查。
费迪南德·普兰特

@FerdinandPrantl如果它是为32位构建的,则ldd仍会打印32位依赖项。
Calmarius

@Calmarius,当您没有基本的32位libgcc1时,这是不正确的。刚刚在全新的Ubuntu Server安装上进行了验证:您需要安装libgcc1:i386才能使ldd对32位二进制文​​件感到满意。
falstaff 2015年

1

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

我试图升级我的系统(从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 /sda2ldd然后运行如预期。

要解决此问题,我可以使用:i386(arch)手动安装所有从属库软件包。但是,我决定而不是试图弄清我的依赖性是什么,而是安装了wine(它主要是32位的,因此安装了基本库并加载了一些我并不需要的负载,但是我可以接受)。

要解决dpkgapt-get,我编辑/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)


安装wine是获取所需的所有32位库的非常聪明的技巧!
psitae
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.