可执行文件的问题:使用 chmod 修复权限后找不到文件

可执行文件的问题:使用 chmod 修复权限后找不到文件

我已经下载并解压了黑盒 PDDL 规划器,我试图让blackbox文件执行。我切换到包含该文件的目录并尝试./blackbox,结果出现了权限错误。没什么大不了的,只需运行chmod 755 blackbox以授予其可执行权限即可。但是,当我./blackbox再次尝试时,出现了以下错误:

bash: ./blackbox: No such file or directory

当我给出命令参数时,它也会这样做。ls -l但是当我运行时,我看到了blackbox文件并且它有-rwxr-xr-x权限,所以我不确定为什么它会“丢失”文件。

如果重要的话,我正在运行 Ubuntu 14.04 和 Windows 7 双启动。

编辑:我发现了一个有帮助的问题在 Superuser 上,它部分帮助了我。我跑去readelf -l ./blackbox | grep ld-linux寻找我需要的东西,然后进行了包内容搜索,发现我需要这个libc6-i386包。现在我可以执行以下操作:

user@ubuntu:~/path$ ./blackbox 
./blackbox: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
user@ubuntu:~/path$ ldd blackbox 
    linux-gate.so.1 =>  (0xf77af000)
    libstdc++.so.6 => not found
    libm.so.6 => /lib32/libm.so.6 (0xf774f000)
    libgcc_s.so.1 => not found
    libc.so.6 => /lib32/libc.so.6 (0xf75a4000)
    /lib/ld-linux.so.2 (0xf77b0000)

答案1

事实证明,blackbox可执行文件是 32 位程序,而我运行的是 64 位操作系统。以下是我为解决此问题所采取的(有些不规范的)步骤(部分记录在超级用户上的这个问题):

  • uname -m告诉我我有一个 64 位操作系统,但file blackbox告诉我这个 exe 是 32 位的。
  • ldd blackbox(奇怪的是)告诉我该文件不是动态可执行文件,尽管我也从中看到了这一点file。尝试readelf -l ./blackbox | grep ld-linux告诉我[Requesting program interpreter: /lib/ld-linux.so.2],这是一个共享库,而我在那个位置没有这个库。
  • sudo apt-get install libc6-i386获取该库文件(发现使用包搜索packages.ubuntu.com)。
  • 现在ldd给了我输出,但我缺少libstdc++.so.6libgcc_s.so.1参见我的编辑),所以我需要获取这些文件。
  • 在搜索了更多软件包之后,我发现gcc-snapshot软件包中有我缺少的两个文件。这可能是一把巨大的锤子,却打不中我的小钉子,而且可能还有更好的解决方案,但它sudo apt-get install gcc-snapshot让我得到了我需要的文件。
  • 再次运行后ldd,此问题得到解决libgcc_s.so.1,但libstdc++.so.6仍然未找到。我最终去了ldd找到libgcc_s.so.1并运行的地方sudo ln -s /usr/lib/gcc-snapshot/lib32/libstdc++.so.6 libstdc++.so.6以获取最近安装的文件的符号链接。

相关内容