首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android交叉编译时发出system()调用

Android交叉编译时发出system()调用
EN

Stack Overflow用户
提问于 2012-09-09 06:14:41
回答 2查看 408关注 0票数 0

基于NDK独立工具链和仿生工具链的一些限制,我使用了以下一般设置使用了自己的工具链:

  • binutils-2.22
  • gcc-4.5.3启用gfortran
  • glibc-2.14.1
  • kernel-headers-2.35.7
  • arch arm4t

使用它,我构建了一个可执行文件,并将所有依赖项(包括libc、device等)上传到我的Android设备上。我用ld-linux.so.3手动运行可执行文件--库路径.

它是一个非常复杂的可执行文件,除了执行任何system()调用,甚至是一些基本的调用(如system("pwd")或system(NULL) )之外,它们似乎都能工作,我得到127作为状态(未找到)。如果我更进一步使用popen来收集回复,我会得到:

*检测到glibc *双自由或损坏

怎么一回事?有人成功地做了类似的事情吗?有权限问题吗?Android是否有本质上的不同,使得system()调用不可能?在哪里可以找到仿生处理系统和popen (源代码)的方式,因为我认为如果您使用NDK,您可以执行system()调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-09 06:21:42

(1) SHELL环境变量不太可能设置在Android上。默认的外壳/bin/sh不存在(AFAIK);它在/system/bin/sh中。这很可能是导致system失败的原因。

(2)您可以在GitHub上找到实现:系统波芬。您在glibc中的崩溃听起来像是库错误(除非您使用的是信号处理程序或多线程环境中的popen )。

票数 1
EN

Stack Overflow用户

发布于 2012-09-09 06:18:01

我建议您只使用您自己版本的system。它一点也不复杂,这将使您能够确定失败的确切系统调用以及它失败的错误。很可能,shell是不正确的,这就是产生错误的原因--您的库正在指定一个不存在的shell程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12336954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档