【问题标题】:"No such file or directory" trying to execute linux binary on Android device“没有这样的文件或目录”试图在 Android 设备上执行 linux 二进制文件
【发布时间】:2012-11-14 22:30:36
【问题描述】:

我使用 Android GCC 工具链(普通 linux,没有 android 或 NDK)构建了一个原生 linux ARM 二进制文件。

我通过 adb shell 从我的 PC 连接到运行 Android 4 的平板电脑。 我将该二进制文件“adb push”到该设备上的 /system/bin 中,希望我能让它在那里执行。我用 chmod 777 将其标记为可执行。

如果我尝试执行它,我会得到“没有这样的文件或目录”。

更多信息: 这个小程序使用 fc 和 fm 库。由于 ARM 工具链似乎没有 crt1,从我发现的示例中,它通常包含启动代码,我们在 android 构建中搜索包含它的文件,找到 crtbegin_dynamic 和 crtend_dynamic,但对于 _static 等效项,其中之一丢失了,所以我没有将 -static 传递给 GCC。它是用“-nostdlib”构建的。

可能是什么问题?

【问题讨论】:

  • 您需要使用 nm 或类似工具来查找可执行文件的依赖项,但实际上您应该只使用 NDK gcc 为 Android 构建,除非您坚持以艰难的方式做事。 请注意,这个问题与缺少开发机器的库无关,尽管在​​这个完全不同的主题上神秘地吸引了一个流行的答案。

标签: android linux native


【解决方案1】:

如果您在 Ubuntu 64 等 64 位平台上工作,那么此提示可能会帮助您解决问题。只需尝试简单地安装 i386 32 位兼容性库 容易得到:

sudo apt-get install ia32-libs

它对我很有用。如果您遇到同样的麻烦,请告诉我。

适用于 Ubuntu 13.10 或更高版本

正如 aditya 在 cmets 中对这个答案所说:

从 Ubuntu 13.10 开始,现在必须运行它: sudo apt-get install lib32z1,您可能还需要获取 C++ 标准库,使用:sudo apt-get install lib32ncurses5 lib32stdc++6

【讨论】:

  • 从 Ubuntu 13.10 开始,看起来 ia32-libs 已被以下软件包替换。现在必须运行它:sudo apt-get install lib32z1 我也必须获得 C++ 标准库,用这个:sudo apt-get install lib32ncurses5 lib32stdc++6
  • 虽然这可能有助于其他人在他们的 ubuntu linux 系统上运行 adb 可执行文件,但它似乎与所提出的问题没有任何关系,它涉及 运行二进制文件在android本身下。不用说,Android 没有使用 debian 风格的打包系统。
【解决方案2】:

要修改 aditya 上面的评论,您还可以将以下内容用于 Ubuntu 13.10 中的 C++ 标准库:

sudo apt-get install lib32ncurses5 libstdc++6:i386

【讨论】:

  • 这与所提出的问题无关,它涉及在 Android 本身上运行可执行文件 - 一个不使用 debian 打包系统的 linux。
猜你喜欢
  • 2018-12-19
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
相关资源
最近更新 更多