该二进制文件需要哪些库才能运行?

时间:2012-02-27 15:52:28

标签: linux shared-libraries binaryfiles

基于Linux(Ubuntu 11.10)

在我的计算机崩溃之前,我的计算机上有一个二进制文件:./program是在没有源的情况下提供给我的。这个文件执行得很好。当我的硬盘驱动器出现故障时,我开始全新安装并尝试在同一台计算机上运行此二进制文件。它现在失败了:

bash: ./program: cannot execute binary file

在文件上运行ldd会提供更多信息:

/usr/bin/ldd: line 161: /lib64/ld-linux-x86-64.so.2: cannot execute binary file
not a dynamic executable

我有第二台计算机,二进制运行,ldd给出输出:

./program:
    linux-vdso.so.1 =>  (0x00007fffdad5e000)
    libz.so.1 => /lib64/libz.so.1 (0x00000039a1400000)
    libstdc++.so.6 => /usr/local/gcc/gcc-4.5.1/lib64/libstdc++.so.6 (0x00007fce82c7a000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fce829f6000)
    libgcc_s.so.1 => /usr/local/gcc/gcc-4.5.1/lib64/libgcc_s.so.1 (0x00007fce827e1000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fce82452000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fce82f7f000)

有没有办法告诉我需要什么,以便让我的程序再次运行?我知道在崩溃之前安装的所有内容都是使用apt-get完成的,因此我认为它不需要任何不在存储库中的任何唯一内容。

本地化问题?

我承认这个具体的问题对我来说可能是特别的 - 但问题仍然是一般意义上的问题。仅给出二进制文件,如何确定需要运行哪些库?

1 个答案:

答案 0 :(得分:2)

file工作的计算机上以程序作为参数运行ldd。它将告诉您二进制文件是否为32位或64位构建。您可能必须在运行之前安装32位兼容库,在debian / ubuntu上,这称为ia32-libs