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

标签 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 完成的所以我认为它不需要存储库中没有的任何独特内容。

本地化问题?

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

最佳答案

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

关于linux - 该二进制文件需要哪些库才能运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9467952/

相关文章:

c++ - Linux C++ 动态库和静态初始化顺序

c++ - 在共享库的构造函数(_init 部分)中,如何知道哪个函数被中断了?

gcc - 不执行共享库构造函数

linux - 在 Ubuntu :libudev. 上运行 32 位 exe 所以:无法打开共享对象文件:没有这样的文件或目录

git - 在版本控制中存储安装文件以自动化开发机器设置

c++ - 警告 : format ‘%d’ expects argument of type ‘int *’ , 但参数 5 的类型为 ‘int’ [-Wformat=]

linux - pentaho 无法通过 chrome 访问

linux - 在文件中搜索文本字符串并替换它

嵌入式应用程序的 CSV 或二进制文件

c++ - `fout.write( reinterpret_cast<const char*>(&e), sizeof(e) );` 为什么在这里转换成 `const char*` ?