基于NDK独立工具链和仿生的一些限制,我使用crosstool-NG使用这些常规设置来创建自己的工具链:
使用这个我构建一个可执行文件并将所有依赖项(包括libc,ld-linux等)上传到我的Android设备上。我用ld-linux.so.3手动运行可执行文件--library-path ...
这是一个非常复杂的可执行文件,除了,如果我进行任何system()调用,甚至是基本的东西,如系统(“pwd”)或系统(NULL),我得到127作为状态(未找到)。如果我更进一步使用popen来收集回复,我得到:
* 检测到glibc * 双重免费或损坏
发生了什么事?有没有人成功做过类似的事情?是否存在权限问题?有没有根本不同的Android使system()调用不可能?我在哪里可以找到bionic如何处理系统和popen(源代码)到底,因为我认为如果使用NDK,你可以进行system()调用。
答案 0 :(得分:1)
我建议您滚动自己的system
版本。它根本不复杂,这将使您能够确定失败的确切系统调用以及失败的错误。最有可能的是,shell不正确,这就是产生错误的原因 - 你的库正在指定一个不存在的shell程序。
答案 1 :(得分:1)