运行可执行文件:没有那个文件或目录

bla*_*ter 5 terminal executable cross-compilation kali-linux

我正在尝试运行一个i686-elf-gcc在我的 Kali Linux 中调用的可执行文件,我从这个存储库下载了该文件。这是一个交叉编译器。问题是,即使终端和我编写的脚本都可以看到该文件存在,但在实际执行它的时候我得到了 No such file or directory错误。这是一个解释它的图像:

在此处输入图片说明

我还必须说,我已授予可执行文件必要的权限。

tel*_*coM 8

通常,“无法执行...没有这样的文件或目录”意味着可执行二进制文件本身或它需要的库之一不存在。库本身也可能需要其他库。

要查看指定的可执行文件或库所需的库列表,可以使用以下ldd命令:

$ ldd /usr/local/bin/i686-elf-gcc
Run Code Online (Sandbox Code Playgroud)

如果结果列表包含类似的行

<library name> => not found
Run Code Online (Sandbox Code Playgroud)

然后可以通过确保已安装提到的库并在库搜索路径中来解决问题。

在这种情况下,库可能位于/usr/local/lib/usr/local/lib64,但由于某种原因,该目录未包含在库搜索路径中。

如果您希望额外的库仅可用于特定程序或会话,您可以使用 LD_LIBRARY_PATH 环境变量来标识应该搜索缺失库的额外路径。这将最大限度地减少与系统默认库发生冲突的可能性。

但是,如果您想将库目录添加到系统默认库搜索路径中,您应该将其添加到/etc/ld.so.conf文件中,或者创建一个/etc/ld.so.conf.d/*.conf您选择的文件,然后ldconfig以 root 身份运行该命令以更新库搜索缓存。

例如,如果在目录中找到缺少的库/usr/local/lib64并且/etc/ld.so.conf.d目录存在,您可能希望创建这样的crosscompiler.conf文件:

# echo "/usr/local/lib64" > /etc/ld.so.conf.d/crosscompiler.conf
# ldconfig
Run Code Online (Sandbox Code Playgroud)

  • “无法执行...”并不意味着缺少库(在可执行文件启动后,您会收到通常的“无法打开共享对象文件”消息)。这意味着缺少装载机。请参阅重复的问题。 (2认同)
  • 重复的问题在哪里?@吉尔斯所以停止邪恶 (2认同)