前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用NDK下的GCC工具编译c代码至android设备中运行

使用NDK下的GCC工具编译c代码至android设备中运行

作者头像
乱码三千
发布2021-08-24 14:52:54
2.2K0
发布2021-08-24 14:52:54
举报
文章被收录于专栏:乱码三千乱码三千

之前我们学过使用GCC子集之一arm-none-linux-gnueabi进行C代码编译,这次我们学习GCC另外一个子集arm-linux-androideabi,这是专门为android平台打造的一个GCC编译环境,该工具被包含在Android NDK库当中

实验环境

  • windows宿主机
  • 安卓模拟器(ARM架构+linux系统 已Root)
  • android-ndk-r9b

实验开始

第一步 编写测试代码 文件名为test.c

#include <stdio.h>

int main(){
	printf("hello pangshu");
	return 0;
}

第二步 将测试代码编译成可执行文件

如果直接编译:

arm-none-linux-androideabi-gcc.exe test.c -o main

则报错,提示:

clude-fixed\stdio.h:50:23: fatal error: sys/cdefs.h: No such file or directory

这是因为缺少相应的依赖库导致的,在我们使用arm-none-linux-gnueabi时直接在命令行后面添加-static即可,但是使用arm-linux-androideabi则不行

这里需要通过--sysroot指定依赖的库,指令改成如下:

arm-none-linux-androideabi-gcc.exe --sysroot=E:\android-ndk-r9b\platforms\android-19\arch-arm test.c -o main

此时编译通过,但是将生成的执行文件push到安卓设备上之后,却无法运行,提示:

error: only position independent executables (PIE) are supported.

因此我们需要借助-pie -fPIE将编译选项设置为PIE,指令最后改成如下:

arm-none-linux-androideabi-gcc.exe  -pie -fPIE --sysroot=E:\android-ndk-r9b\platforms\android-19\arch-arm test.c -o main

此时程序可正常执行

使用arm-linux-androideabi生成的可执行文件大小为6kB 使用arm-none-linux-gnueabi生成的可执行文件约为620KB

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乱码三千 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验环境
  • 实验开始
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档