设为首页 加入收藏

TOP

Android与Ubuntu下的可执行文件互用
2014-11-24 07:46:17 来源: 作者: 【 】 浏览:0
Tags:Android Ubuntu 执行 文件

  有时候想运行一下系统编译出来的工具,结果说不能执行,Can't execute,而明明就具有执行权限。


  这些问题,在很多情况下可以如下解决,而且解决起来居然就这么简单。


  对于自己写的C代码,如test.c


#include


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.c


LOCAL_MODULE := newfs_msdos


LOCAL_STATIC_LIBRARIES := libcutils


include $(BUILD_HOST_EXECUTABLE)


$(call dist-for-goals,droid,$(LOCAL_BUILT_MODULE))


  然后处理一些编译newfs_msdos.c的错误,如去掉__unused啊什么的,编译出来后,在out/host/linux-x86/bin可以找到newfs_msdos工具,此时你再运行,就发现可以运行了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇json-cpp库在Linux下的编译 下一篇Linux下使用原始套接字实现ping ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)