1. 程式人生 > >NET-SNMP Android上的編譯(基於NDK10)

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檔案