NDK开发汇总
int main(){
printf("111\n");
return 0;
}
gcc main.c 将生成a.out文件
vi mian.c 添加头文件
#include
11111
想要在ubuntu中编译出在Android手机中可以执行的文件,需要下载NDK中对应的交叉编译工具
找到ndk的官网下载地址,注意选Linux平台
wget ndk的url地址
export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
$CC main.c
@ubuntu:~$ export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
bao@ubuntu:~$ $CC main.c
main.c:1:19: fatal error: stdio.h: No such file or directory
#include
^
compilation terminated.
需要链接对应的头文件,涉及到链接头文件和库文件的配置
如果被编译的文件链接了其他头文件或者库文件,需要进行配置
类似 javac -classpath xxx
--sysroot=XX
使用xx作为这一次编译的头文件与库文件的查找目录,查找下面的 usr/include 目录
-isysroot XX
头文件查找目录,覆盖--sysroot ,查找 XX/usr/include
-isystem XX
指定头文件查找路径(直接查找根目录)
-IXX
头文件查找目录
优先级:
-I -> -isystem -> sysroot
gcc --sysroot=目录1 -isysroot 目录2 -isystem 目录3 -I目录4 main.c
查找 目录1/usr/lib 的库文件
目录2 /usr/include 的头文件
还去查找 目录3 下的头文件
还去查找 目录4 下的头文件
-LXX
指定库文件查找目录
-lxx.so
指定需要链接的库名
gcc -L目录1 -l库名
例子: 链接ndk的日志库
gcc -LC:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm\usr\lib
-llog -lGLESv2
还可以
gcc --sysroot=C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm
-llog -lGLESv2
export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
export AAA="--sysroot=/home/bao/android-ndk-r17c/platforms/android-21/arch-arm -isystem /home/bao/android-ndk-r17c/sysroot/usr/include -isystem /home/bao/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
$CC $AAA -pie main.c -o main
生成main,用file查看,发现是ARM架构
bao@ubuntu:~$ file main
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, not stripped
将main文件放到具有root权限的手机中./main执行,能够输出:111,这样就编译生成了一个Android可用的可执行文件
/home/bao 改成你的ndk所在路径