NET-SNMP Android上的編譯(基於NDK10)
之前記錄的基於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檔案