【问题标题】:what does "-sh: executable_path:not found" mean“-sh: executable_path:not found”是什么意思
【发布时间】:2014-01-31 19:18:44
【问题描述】:

我正在尝试在 linux shell 中运行一个可执行文件(树莓派上的 OpenELEC)

OpenELEC:~ # /storage/fingi/usr/lib/autossh/autossh
-sh: /storage/fingi/usr/lib/autossh/autossh: not found

这种情况下的“未找到”是什么意思?

如果我尝试做 ldd:

OpenELEC:~ # ldd  /storage/fingi/usr/lib/autossh/autossh
/usr/bin/ldd: eval: line 1: /storage/fingi/usr/lib/autossh/autossh: not found

如果我做文件:

OpenELEC:~ # file /storage/fingi/usr/lib/autossh/autossh
/storage/fingi/usr/lib/autossh/autossh: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=599207c47d75b62ede5f214f9322ae2a18643eb7, stripped

文件类型格式正确。但它不会工作,也不会给出更多描述性的错误消息。

由于 openELEC 非常严格,我从 raspbmc 安装中复制了 autossh 可执行文件。我也为其他几个可执行文件(屏幕、boost 库等)完成了它,它们工作正常。

谁能提出可能是什么问题?

编辑 1: 正如建议的那样,这是正在运行的可执行文件(也从 raspbmc 复制)上的 file 命令的输出:

OpenELEC:~ # file /storage/fingi/usr/bin/screen
/storage/fingi/usr/bin/screen: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=5c58f047a25caa2c51a81d8285b4f314abc690e7, stripped

【问题讨论】:

  • 也许它表明可执行文件的文件类型不是正确的类型,尽管当出现问题时,消息通常不是“未找到”。找到另一个可执行文件(可能是/bin/sh 并比较file 报告的类型。
  • 已添加。它们完全一样
  • 是的,我怀疑这是架构问题..但它适用于所有其他可执行文件!

标签: linux shell raspberry-pi embedded-linux


【解决方案1】:

这种情况下的“未找到”是什么意思?

这通常意味着可执行文件无法找到一个或多个(共享)库来满足其外部符号。
这通常发生在 initramfs 中没有存储库,或者缺少可执行文件所需的共享库时。
如果可执行文件是使用与运行时库不兼容的 C 库构建的,例如uClibc 与 glibc/eglibc。

strings executable | less 是查看可执行文件所需的库和外部符号的最快方法。
或者
通过指定-static 选项重新编译您的程序并使用静态链接。

【讨论】:

    【解决方案2】:

    使用ls -l检查文件是否已设置为可执行权限,如果chmod +x /storage/fingi/usr/lib/autossh/autossh没有更改

    【讨论】:

    • 具有可执行权限:-rwxr-xr-x 1 root root 22.9K Jan 12 23:59 autossh
    • 试试objdump -p /path/to/program | grep NEEDED
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2019-05-03
    • 2015-03-07
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多