基于 NDK 独立工具链和仿生的一些限制,我使用带有这些常规设置的 crosstool-NG 推出了自己的工具链:
- binutils-2.22
- 启用了 gfortran 的 gcc-4.5.3
- glibc-2.14.1
- 内核头文件 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() 调用。