基于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
完成的,因此我认为它不需要任何不在存储库中的任何唯一内容。
本地化问题?
我承认这个具体的问题对我来说可能是特别的 - 但问题仍然是一般意义上的问题。仅给出二进制文件,如何确定需要运行哪些库?
答案 0 :(得分:2)
在file
工作的计算机上以程序作为参数运行ldd
。它将告诉您二进制文件是否为32位或64位构建。您可能必须在运行之前安装32位兼容库,在debian / ubuntu上,这称为ia32-libs
。