使用NDK独立工具链移植开源项目到andriod中(以openssl为例)

一、NDK独立工具链编译安装    

    本人使用的是CentOS linux,ndk 版本为 android-ndk-r16b,我使用的是root用户

    1、下载linux版本NDK android-ndk-r16b-linux-x86_64.zip , 上传解压到/home/android-ndk-r9d

    2、设置环境变量,为了使每个用户都能使用这个工具链,环境变量设置到 /etc/profile中

     export ANDROID_NDK=/home/android-ndk-r16b
     export TOOLCHAIN=/home/cross_tool/AndroidToolChain
     export NDK_CROSS=/home/cross_tool/AndroidToolChain/bin
     PATH=$PATH:$ANDROID_NDK:$NDK_CROSS

     环境变量可根据用户实际情况填写,ANDROID_NDK 为NDK的安装目录,TOOLCHAIN 为工具链的安装目录, NDK_CROSS为工具链进程所在目录;

     3、编译独立工具链

    /home/android-ndk-r16b/build/tools/make-standalone-toolchain.sh --platform=android-21 --toolchain=arm-linux-androideabi-4.8 --arch=arm --install-dir=/home/cross_tool/AndroidToolChain

    编译后,工具链安装在/home/cross_tool/AndroidToolChain目录中

二、使用该工具链移植开源项目,这里以openssl为例

    本人使用的版本为openssl-1.1.0e,开始使用openssl-1.1.1-pre8版本出现问题,./Configure 就报错,没有搞定。

    1、下载软件包,创建编译环境

         创建ssl_android用户,shell使用bash,下载openssl-1.1.0e.tar.gz,解压中新建目录

    2、设置编译器环境变量(修改 .bashrc文件)
export CROSS_SYSROOT=$TOOLCHAIN/sysroot
export TOOL=arm-linux-androideabi
export CC=$TOOLCHAIN/bin/${TOOL}-gcc
export CXX=$TOOLCHAIN/bin/${TOOL}-g++
export LINK=${CXX}
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 ARCH_FLAGS="-mthumb"
export ARCH_LINK=
export CFLAGS="${ARCH_FLAGS}-fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"
export CXXFLAGS="${CFLAGS}-frtti -fexceptions"
export LDFLAGS="${ARCH_LINK}"

3、配置,编译

    ./Configure android --prefix=/build/ssl_android/openssl no-asm  no-unit-test 

    make

    编译时遇到了问题,出现了部分未定义符号,如 stderr  strin  signal tcgetattr tcsetattr

    百度一遍,好像是说NDK的工具链中不支持这些函数和变量,好在函数不多,并且都是打印debug信息时用的,并且我也不需要openssl命令行工具,只需要so就可以了,就写了几个空函数先规避。

    这几个函数编译时是OK的,但是连接时报错,说明里面的头文件还是有的,为啥没有定义没搞明白,难道需要手动引入其他的库?有大神知道还请不吝赐教。

 

 

 

你可能感兴趣的:(使用NDK独立工具链移植开源项目到andriod中(以openssl为例))