之前记录的基于NDK16的SNMP Android上的编译报错很多,基本无法正常编译。后续在排查问题,发现NDK版本差异一起的这些问题,具体我们来看:
在使用NDK10的时候,我们修改脚本setenv.sh:
#! /bash/sh
**************************************************************************************************************
export NDKROOT="/home/soft7team/sikeyan/ndk/crosstools"
export PATH=$NDKROOT:$PATH
export SYSROOT=$NDKROOT/sysroot/
export CC="$NDKROOT/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"
./configure \
--host=arm \
--prefix=/home/soft7team/sikeyan/ndk/install_dir \
--disable-FEATURE \
--disable-silent-libtool \
--disable-snmpv1 \
--disable-snmpv3 \
--enable-as-needed \
--disable-manuals \
--disable-agent \
--disable-manuals \
--disable-mibs \
--disable-mib-loading \
--disable-scripts \
--disable-mibs \
--disable-mib-loading \
--disable-des \
--disable-privacy \
--disable-md5 \
--disable-developer \
--disable-local-smux \
--disable-debugging \
--disable-snmptrapd-subagent \
--disable-mfd-rewrites \
--disable-embedded-perl \
--disable-fast-install \
--disable-libtool-lock \
--disable-perl-cc-checks \
--disable-shared \
--disable-ipv6 \
--disable-ucd-snmp-compatibility \
--disable-deprecated \
--disable-minimalist \
--disable-testing-code \
--with-endianness=little \
--without-PACKAGE \
--with-endianness=little \
--with-cflags="-s -O2 -pie -fPIE -D __ANDROID_API__=21 -D BUILD_IN_NDK" \
--with-linkflags="-pie -fPIE"
--without-opaque-special-types \
--without-kmem-usage \
--with-persistent-directory="/var/net-snmp" \
--with-copy-persistent-files="no" \
--with-default-snmp-version="2" \
--with-transports="UDP" \
--with-out-transports="UDPIPv6 TCPIPv6 TCP Unix Callback AAL5PVC IPX" \
--with-out-mib-modules="snmpv3mibs ucd_snmp agent_mibs agentx notification target utilities disman/event disman/schedule host mibII/tcpTable mibII/route_write mibII/sysORTable mibII/vacm_vars"
当然,介于bonic-c和gnu-c的差异,部分函数是不支持的,基本如下图报错。
对于这些报错,仔细分析,主要是snmpstat这个bin文件使用到,但是我们厂测开发其实用不到这个命令,所以可以在源码中,利用宏控制关闭。
当然,以上只是部分源码,具体的可以参卡服务器代码。
编译脚本中,一定要注意以上的Flag。
当然,以上所有是基于NDK10所编译出来的独立编译工具链,编译独立工具链的方法如下:
1.建立编译目录NDK,分别下载NDK(android-ndk-r10e)和snmp(5.4.21)包,并解压.
2.分别建立编译工具安装目录:crosstools 和snmp安装目录install_dir
3.在ndk编译目录,unzip ndk,执行./android-ndk-r10e/build/tools/make-standalone-toolchain.sh --platform=android-21 --install-dir=crosstools --arch=arm
在建立好编译环境之后:
1.在snmp目录下执行,source setenv.sh
2.make
3.make install
4.可以install_dir目录下寻找对应的bin文件