51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

tinyfecVPN的android版本编译

在考虑实现一个P2P的公网监控点播方案,监控端通过局域网组网,局域网放一台服务器(双网卡,可上外网),作为局域网内所有监控的控制出口,该服务器上运行ZLMediaKit Server程序,集成tinyfecVPN Server的能力,通过该端口维持一个端口到公网STUN服务器的心跳(并转换为公网的地址和端口),所有接入的客户端通过公网的地址和端口点播实时的监控(协议走rtmp、rtsp或者hls均可),所以客户端需要支持VPN 客户端接入的能力!


tinyfecVPN本身支持跨平台,只需要做好交叉编译器的设置就可以,编译不算复杂。


1、设置基础环境变量:

export ANDROID_NDK_ROOT=/home/ljj/android-ndk-r16b

export TOOLCHAIN_ARCH=arm-linux-androideabi-4.9

export MIN_PLATFORM=android-19

export TOOLCHAIN=/home/ljj/my-android-toolchain-android-armv7


2、生成编译工具链:

$ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh \

--toolchain=$TOOLCHAIN_ARCH --llvm-version=3.6 \

--platform=$MIN_PLATFORM --install-dir=$TOOLCHAIN



3、编写一个build_android.sh脚本:

#!/bin/sh

#[root@localhost tinyfecVPN_Android]# ./build_android.sh


export CXX="${TOOLCHAIN}/bin/arm-linux-androideabi-g++"

export CC="${TOOLCHAIN}/bin/arm-linux-androideabi-gcc"

export ANDROID_CC="${TOOLCHAIN}/bin/arm-linux-androideabi-gcc"

export AR="${TOOLCHAIN}/bin/arm-linux-androideabi-ar"

export LD="${TOOLCHAIN}/bin/arm-linux-androideabi-ld"

export STRIP="${TOOLCHAIN}/bin/arm-linux-androideabi-strip"

export AS="${TOOLCHAIN}/bin/arm-linux-androideabi-as"

#export LOCAL_LDLIBS = -ldl -lz

export LOCAL_LDLIBS="-L${ANDROID_NDK_ROOT}/platforms/android-19/arch-arm/usr/lib/ "


#gnustl_static lgnustl_shared

export ANDROID_LIBS="-pie -L${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -llog -fexceptions -frtti -fPIC -L${TOOLCHAIN}/sysroot/usr/lib -lgnustl_static "

export LDFLAGS="-pie -L${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -llog -fexceptions -frtti -fPIC -L${TOOLCHAIN}/sysroot/usr/lib -lgnustl_static"


Tell configure what flags Android requires.

export CFLAGS=" -I${TOOLCHAIN}/sysroot/usr/include -D__ANDROID_API__=19 -fPIE -fPIC ${ANDROID_LIBS}"


export CXXFLAGS=" -DANDROID=1 -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include -I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -I${ANDROID_NDK_ROOT}/sources/cxx-stl/system/include -I${ANDROID_NDK_ROOT}/platforms/android-19/arch-arm/usr/include -I${TOOLCHAIN}/sysroot/usr/include -D__ANDROID_API__=19 -fPIE -fPIC ${ANDROID_LIBS} -std=c++11 "


4、修改makefile

cc_arm= ${CXX}


-lrt删除


5、执行build_android.sh脚本:

[root@localhost tinyfecVPN_Android]# source build_android.sh


6、编译tinyfecVPN,生成可执行程序:

[root@localhost tinyfecVPN_Android]# make arm

echo "const char * const gitversion = \"db2883ecc5e97c3cfd7641d01ca6b63aeb4060ba\";" > git_version.h

/home/ljj/my-android-toolchain-android-armv7/bin/arm-linux-androideabi-g++ -o tinyvpn_arm -I. `ls UDPspeeder/*.cpp UDPspeeder/lib/*.cpp|grep -v main.cpp|grep -v tunnel.cpp` main.cpp tun_dev.cpp tun_dev_client.cpp tun_dev_server.cpp -DANDROID=1 -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -I/home/ljj/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include -I/home/ljj/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -I/home/ljj/android-ndk-r16b/sources/cxx-stl/system/include -I/home/ljj/android-ndk-r16b/platforms/android-19/arch-arm/usr/include -I/home/ljj/my-android-toolchain-android-armv7/sysroot/usr/include -D__ANDROID_API__=19 -fPIE -fPIC -pie -L/home/ljj/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -llog -fexceptions -frtti -L/home/ljj/my-android-toolchain-android-armv7/sysroot/usr/lib -lgnustl_static -std=c++11 -frtti -fPIC -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-missing-field-initializers -I. -IUDPspeeder -isystem UDPspeeder/libev -O3

[root@localhost tinyfecVPN_Android]#


生成一个tinyvpn_arm 文件


呱牛笔记





赞(0)
未经允许不得转载:工具盒子 » tinyfecVPN的android版本编译