之前我们学过使用GCC子集之一
arm-none-linux-gnueabi
进行C代码编译,这次我们学习GCC另外一个子集arm-linux-androideabi
,这是专门为android平台打造的一个GCC编译环境,该工具被包含在Android NDK库当中
实验环境
- windows宿主机
- 安卓模拟器(ARM架构+linux系统 已Root)
android-ndk-r9b
实验开始
第一步 编写测试代码 文件名为test.c
1 |
|
第二步 将测试代码编译成可执行文件
如果直接编译:
1 | arm-none-linux-androideabi-gcc.exe test.c -o main |
则报错,提示:
1 | 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
指定依赖的库,指令改成如下:
1 | arm-none-linux-androideabi-gcc.exe --sysroot=E:\android-ndk-r9b\platforms\android-19\arch-arm test.c -o main |
此时编译通过,但是将生成的执行文件push到安卓设备上之后,却无法运行,提示:
1 | error: only position independent executables (PIE) are supported. |
因此我们需要借助-pie -fPIE
将编译选项设置为PIE,指令最后改成如下:
1 | 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
本文为作者原创 转载时请注明出处 谢谢
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站