当前位置:   article > 正文

android交叉编译C++代码_android-ndk-r23 sysroot目录在哪

android-ndk-r23 sysroot目录在哪

Android交叉编译C++

1、前置条件

a.交叉编译工具:android-ndk-r23c (放在该目录下 /opt/ndk/

b.source 环境: source android_r23_arm-env

android_r23_arm-env文件内容如下:

#!/bin/bash

# export for ndk r23c
API_LEVEL="21"
export ANDROID_HOST=aarch64-linux-android
export ANDROID_BUILD=linux-x86_64
export ANDROID_ARCH=arm64
export ANDROID_NDK=/opt/ndk/android-ndk-r23c
export ANDROID_TOOLCHAIN_VERSION=4.9
export RANLIB=$ANDROID_HOST-ranlib
export TOOLCHAIN="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64" 
export SYSROOT=$TOOLCHAIN/sysroot
export CC="$ANDROID_HOST$API_LEVEL-clang "
export CXX="$ANDROID_HOST$API_LEVEL-clang++ "
export LD="$TOOLCHAIN/bin/ld "
export AR="$TOOLCHAIN/bin/llvm-ar"
export AS="$TOOLCHAIN/$ANDROID_HOST/bin/as"
export RANLIB="$TOOLCHAIN/bin/llvm-ranlib"
export STRIP="$TOOLCHAIN/bin/llvm-strip"
export CPPFLAGS="--sysroot=$SYSROOT"
export ARCH_FLAGS="-mthumb"
export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector-all -fno-strict-aliasing"
export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
export PATH="$TOOLCHAIN/bin:$PATH"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

android_r21_arm-env文件内容如下(如果用的是21版本的ndk可以用这个,下面脚本source部分自行修改就行):

#!/bin/bash
export TOOLCHAIN=/opt/ndk/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/
export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
export TOOL=aarch64-linux-android
export LD=$TOOLCHAIN/bin/${TOOL}-ld
export AR=$TOOLCHAIN/bin/${TOOL}-ar
export RANLIB=$TOOLCHAIN/bin/${TOOL}-ranlib
export STRIP=$TOOLCHAIN/bin/${TOOL}-strip
export PATH=$TOOLCHAIN/bin:$PATH
export SYSROOT=$TOOLCHAIN/sysroot
export ARCH_FLAGS="-mthumb"
export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector-all -fno-strict-aliasing"
export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

编译脚本 build.sh(大部分可以直接使用)

#!/bin/bash

#根据实际目录修改
source  "/opt/ndk/android_r23_arm-env"
# current dir
CURRENT_PATH=$(pwd)
#预留
TARGET=aarch64-linux-android
#按照需要的ABI进行修改 
#TARGET_ABI=armeabi-v7a
TARGET_ABI=arm64-v8a
 
PREFIX=$CURRENT_PATH/build/$TARGET_ABI
 
if [ -d $PREFIX ];then
rm -rf $PREFIX
mkdir -p $PREFIX
else
mkdir -p $PREFIX
fi
 
echo "---------------------------"
echo " > start to build ARM64."
echo "---------------------------"
 
cd $CURRENT_PATH/build/
 
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
        -DCMAKE_INSTALL_PREFIX=$PREFIX \
        -DANDROID_ABI=$TARGET_ABI \
        -DANDROID_PLATFORM=android-21 \
        -DCMAKE_BUILD_TYPE=release\
        -DANDROID_TOOLCHAIN=clang++ \
        ..
make  -j  8
make install
 
echo "---------------------------"
echo " >   build finished."
echo "---------------------------"
cd $CURRENT_PATH
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

2、编译第三方库

2.1 编译 protobuf_3_17

  1. 因为protobuf的CMakeLists.txt文件在 cmake 文件夹下,修改build.sh中的cmake部分标红如下:
	cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
        -DCMAKE_INSTALL_PREFIX=$PREFIX \
        -DANDROID_ABI=$TARGET_ABI \
        -DANDROID_PLATFORM=android-21 \
        -DCMAKE_BUILD_TYPE=Release\
        -DANDROID_TOOLCHAIN=clang++ \
        ../cmake/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 直接执行 ./build.sh
  2. 编译成功会在./build/arm64-v8a目录下会有头文件和库文件

2.2 编译 spdlog

  1. 直接执行 ./build.sh
  2. 编译成功会在./build/arm64-v8a目录下会有头文件和库文件

2.3 编译SQLite

  1. build.sh文件如下:
 #!/bin/bash
 source "/opt/ndk/android_r23_arm-env"
 
./configure  --prefix=`pwd`/build/\
       --with-sysroot=$TOOLCHAIN/sysroot \
       --host=aarch64-linux-android
   

if [ $? -eq 0 ]; then
        make -j8 && make install
fi

echo "---------------------------"
echo " >   build finished."
echo "---------------------------"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  1. 编译成功会在./build/目录下会有头文件和库文件
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/573163
推荐阅读
相关标签
  

闽ICP备14008679号