Welcome 微信登录

首页 / 操作系统 / Linux / Android与Ubuntu下的可执行文件互用

有时候有些命令需要用C代码写,编译成可执行程序放到Android系统里,结果不能运行,说找不到文件,而明明文件就在眼前。 有时候想运行一下系统编译出来的工具,结果说不能执行,Can"t execute,而明明就具有执行权限。 这些问题,在很多情况下可以如下解决,而且解决起来居然就这么简单。 对于自己写的C代码,如test.c#include <stdio.h>int main() {printf("OK");return 0;} 然后用gcc test.c –o test编译后放到Android系统去执行,报找不到文件的错误,因为你的程序是动态链接的。那么只要如此编译即可:gcc test.c –o test –static 再放过去,是不是就可以执行了?当然有时候你还是得使用android提供的交叉编译工具去编译,而不仅仅是系统的gcc,如arm-none-linux-gnueabi-gcc 而对于第二个问题,使用系统编译出来的工具,说不可以执行。譬如我想在我的编译主机上执行out/target/product/generic/system/bin下的newfs_msdos,就会报错:-bash: ./newfs_msdos: cannot execute binary file 这是因为它用到了android系统的文件库缘故,去看源文件就是android/system/core/toolbox /newfs_msdos.c,我们把它抠出来单独编译,如在android/system/core/下建立目录newfs_msdos,然后把 newfs_msdos.c放进来,再建立Android.mk文件,这样写:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := newfs_msdos.cLOCAL_MODULE := newfs_msdosLOCAL_STATIC_LIBRARIES := libcutilsinclude $(BUILD_HOST_EXECUTABLE)$(call dist-for-goals,droid,$(LOCAL_BUILT_MODULE)) 然后处理一些编译newfs_msdos.c的错误,如去掉__unused啊什么的,编译出来后,在out/host/linux-x86/bin可以找到newfs_msdos工具,此时你再运行,就发现可以运行了。