【发布时间】:2012-11-10 05:30:03
【问题描述】:
我有两个可执行文件,都经过交叉编译以在 Android 中运行。我已将两者放在同一目录中的设备上。我把它们所依赖的所有共享库都放在了同一个目录下,包括ld-linux.so.3。我使用以下命令运行可执行文件:
ld-linux.so.3 --library-path /path/to/libraries executable_name
当以任何用户身份运行时,两者都可以在旧版本的 Android 上运行。如果以 root 身份运行,两者都可以在最新版本的 Android 上运行。以任何用户身份运行时,只有一个适用于最新版本的 android。相反,它给出了:
无法从共享对象映射段:不允许执行可执行名称操作
如何找出无法运行的可执行文件的不同之处?
我在网上阅读了很多内容,大多数人都会遇到此错误:
A) 对它们所依赖的库之一或可执行文件本身没有执行权限。
或
B) 正在尝试从挂载为 NOEXEC 的目录运行。
这两种情况似乎都不是。它可以找到所有库,我可以自己加载任何库,并查看它依赖于解决的其他问题。此外,我可以从感兴趣的目录运行基本脚本。
较新的 Android 版本 Jelly Bean 是一个不同的 linux 内核版本,我想知道这是否相关。
送什么?我该如何调试?
【问题讨论】:
-
在这里以不同的方式询问(有赏金):stackoverflow.com/questions/13467951/…
标签: android linker executable linker-errors dynamic-linking