/platforms/android-19/arch-arm/usr/include\unistd.h:183:12: note: candidate function not viable: requires /platforms/android-19/arch-arm/usr/include\unistd.h:183:12: note: candidate function not viable: requires 3 arguments, but 0 were provided , 调用的函数头文件是 android-19/arch-arm/usr/include\unistd.h , 这是 ARM 平台的头文件 , 其中的函数定义的都是 ARM 架构的函数 ; 在 ARM 架构的 android-19/arch-arm/usr/include/unistd.h 头文件中 , cacheflush 函数为 :
② 设置指定 头文件和函数库 的临时环境变量 : export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm ② 设置指定 头文件和函数库 的临时环境变量 : export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm
不需要指定 log 库的完整路径 ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so. 下面的构建脚本作用 : 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib , 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm 只需要指定想添加的公共 NDK 库的名称即可, 这里指定 log 即可. # 不需要指定 log 库的完整路径 ndk-bundle\platforms\android-29\arch-arm # 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib # 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib
指定依赖的库,指令改成如下: arm-none-linux-androideabi-gcc.exe --sysroot=E:\android-ndk-r9b\platforms\android-19\arch-arm 指令最后改成如下: arm-none-linux-androideabi-gcc.exe -pie -fPIE --sysroot=E:\android-ndk-r9b\platforms\android-19\arch-arm
find_library 查找系统的动态库 , # 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm 种 CPU 架构的动态库 , 分别对应不同的平台 , 查看 Y:\001_DevelopTools\002_Android_SDK\ndk-bundle\platforms\android-29\arch-arm ANDROID_ABI}") # 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm
enable-cross-compile \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --sysroot=$NDK_ROOT/platforms/android-21/arch-arm 配置依赖库路径 : 配置 android-21 版本 的 库 和 头文件路径 , –sysroot=$NDK_ROOT/platforms/android-21/arch-arm , 其版本是 Android
( 这里以 android-21 版本 ARM CPU 为例 ) ① NDK 库文件目录 : /home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm 最终的指定头文件与函数库的编译指令 : $CC --sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem arm-linux-androideabi-gcc 命令 ; ② 指定函数库 : –sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm
include/arm-linux-androideabi 目录下的文件 , 就是交叉编译时 , 使用到的头文件 ; 依赖库 : android-ndk-r17c/platforms/android-21/arch-arm + 编译器设置 如下参数 , 指定 头文件 和 库文件 的 搜索路径 : --sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ // 指定交叉编译工具链的前缀 --sysroot=$NDK_ROOT/platforms/android-21/arch-arm
设置指定 头文件和函数库 的临时环境变量 : export HEAD_LIB="--sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm book-virtual-machine:~/NDK$ export HEAD_LIB="--sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm native-lib.cpp) # 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm
. # _ANDROID_ARCH=arch-x86 _ANDROID_ARCH=arch-arm # Set _ANDROID_API to the API you want to use. " # echo "$ANDROID_TOOLCHAIN" # exit 1 fi case $_ANDROID_ARCH in arch-arm) ANDROID_TOOLS 变量也失去了相应作用 export ANDROID_NDK_ROOT=/root/NDK/android-ndk-r17c _ANDROID_ARCH : 编译的 CPU 架构 , arch-x86 , arch-arm ; _ANDROID_ARCH=arch-arm _ANDROID_EABI : 交叉编译器 , 如 arm-linux-androideabi-4.6, arm-linux-androideabi- " # echo "$ANDROID_TOOLCHAIN" # exit 1 fi case $_ANDROID_ARCH in arch-arm) ANDROID_TOOLS
/bin/arm-linux-androideabi-strip \ CFLAGS="-I/home/user/Android/Sdk/ndk-bundle/platforms/android-24/arch-arm external/libogg-1.3.1/include" \ CXXFLAGS="-I/home/user/Android/Sdk/ndk-bundle/platforms/android-24/arch-arm external/libogg-1.3.1/include" \ LDFLAGS=--sysroot=/home/user/Android/Sdk/ndk-bundle/platforms/android-24/arch-arm
② 设置指定 头文件和函数库 的临时环境变量 : export C_FLAGS="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm /android/armeabi-v7a/lib# export C_FLAGS="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib
arm-linux \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --sysroot=$NDK_ROOT/platforms/android-21/arch-arm --sysroot=$NDK_ROOT/platforms/android-21/arch-arm \ ... 2 .
=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 PLATFORM=$NDK/platforms/android-16/arch-arm NDK=/usr/local/android/ndk-bundle ANDROID_API=android-14 SYSROOT=$NDK_HOME/platforms/$ANDROID_API/arch-arm /bin/bash NDK=/usr/local/android/ndk-bundle SYSROOT=$NDK/platforms/android-16/arch-arm/ PREBUILT=$NDK
操作 make clean #指定ndk目录 export NDK=/lib/ndk/android-ndk-r14b export SYSROOT=$NDK/platforms/android-9/arch-arm
/bin/bashNDK=/opt/android-ndk-r14b #ndk目录SYSROOT=$NDK/platforms/android-14/arch-arm/TOOLCHAIN=$NDK/toolchains
先看看32位的编译脚本:采用的ndk14b的,编译版本是Android6.0,编译的abi是arm-linux-androideabi,sysroot是$NDK/platforms/android-21/arch-arm ndk/android-ndk-r14b # 设置你的android平台编译器的版本 这里采用Android6.0 export SYSROOT=$NDK/platforms/android-21/arch-arm
=/usr/zzw/ffmpeg-3.0.11/ffmpegtemp NDK=/usr/ndk/android-ndk-r13b PLATFORM=$NDK/platforms/android-14/arch-arm =/usr/zzw/ffmpeg-3.0.11/ffmpegtemp NDK=/usr/ndk/android-ndk-r13b PLATFORM=$NDK/platforms/android-14/arch-arm
/bin/bash NDK=/home/limingyi/android-ndk-r14b PLATFORM=$NDK/platforms/android-19/arch-arm/ TOOLCHAIN=
ndk/android-ndk-r21b # 设置你的android平台编译器的版本 这里采用Android4.0 export SYSROOT=$NDK/platforms/android-16/arch-arm