【发布时间】:2012-09-09 14:21:42
【问题描述】:
基于 NDK 独立工具链和仿生的一些限制,我使用 crosstool-NG 推出了自己的工具链,具有以下常规设置:
- binutils-2.22
- gcc-4.5.3 启用 gfortran
- glibc-2.14.1
- kernel-headers-2.35.7
- 拱臂4t
使用它,我构建了一个可执行文件并将所有依赖项(包括 libc、ld-linux 等)上传到我的 Android 设备上。我使用 ld-linux.so.3 --library-path ... 手动运行可执行文件 ...
这是一个非常复杂的可执行文件,它似乎都可以正常工作,除非我执行任何 system() 调用,甚至是一些基本的调用,例如 system("pwd") 或 system(NULL) 我得到 127 作为状态(未找到)。如果我更进一步并使用 popen 来收集响应,我会得到:
*检测到glibc *双重释放或损坏
发生了什么事?有没有人成功地做类似的?有权限问题吗? Android 是否有一些根本不同的东西使得 system() 调用不可能?我在哪里可以找到仿生最终如何处理 system 和 popen(源代码),因为我认为如果您使用 NDK,您可以进行 system() 调用。
【问题讨论】:
-
什么时候出现 glibc 错误?在
popen电话上?还是在那之后打电话? -
/bin/sh不在 Android 上;它在/system/bin/shAFAIK。 glibc 很可能只使用/bin/sh。 -
nneonneo-你知道glibc中的system()调用在哪里处理吗?具体来说,源代码在哪里?除了修改源代码之外,有没有更好的方法来覆盖它的外观和环境变量?
-
David Schwartz-我相信它是在公开电话中。我之前通过它,但我会仔细检查。
-
system在sysdeps/posix/system.c;在 glibc-2.3 中弹出 曾 在libio/oldiopopen.c中。