Easy系列的安卓Android ndk编译EasyRTSPClient、EasyRTMPClient、EasyPusher、EasyRTMP、EasyIPCamera底层ndk so的流程记录

这是一篇开发的日常记录,现在发现做备忘越来越很重要了,一件事情几个月前做的,再次重新做一遍,尤其是这类的环境搭建,整个过程的坑又得重新跳一遍,太耗时了,这次先大概记录下来,方便后续回溯:

一、NDK选择

  1. Windows采用的是:android-ndk-r13b-windows-x86_64;

  2. Linux采用的是:android-ndk-r13-linux-x86_64

二、静态库交叉编译环境

  1. unzip android-ndk-r13-linux-x86_64;
  2. 到 build/tools/目录中执行make-standalone-toolchain.sh脚本:
./make-standalone-toolchain.sh --platform=android-19 --toolchain=arm-linux-androideabi-4.9 --install-dir=/media/disk2/opt/ndk/android-ndk-r13/standalone_toolchain/arm

./make-standalone-toolchain.sh --platform=android-19 --toolchain=x86-4.9 --install-dir=/media/disk2/opt/ndk/android-ndk-r13/standalone_toolchain/x86

./make-standalone-toolchain.sh --platform=android-19 --toolchain=mipsel-linux-android-4.9 --install-dir=/media/disk2/opt/ndk/android-ndk-r13/standalone_toolchain/mips

./make-standalone-toolchain.sh --platform=android-21 --toolchain=aarch64-linux-android-4.9 --install-dir=/media/disk2/opt/ndk/android-ndk-r13/standalone_toolchain/arm64

./make-standalone-toolchain.sh --platform=android-21 --toolchain=x86_64-4.9 --install-dir=/media/disk2/opt/ndk/android-ndk-r13/standalone_toolchain/x86_64

./make-standalone-toolchain.sh --platform=android-21 --toolchain=mips64el-linux-android-4.9 --install-dir=/media/disk2/opt/ndk/android-ndk-r13/standalone_toolchain/mips64

为什么platform有的是=android-19,有的是=android-21,为啥呢?

这是为了最大程度的兼容,19的ndk里面没有64位,21才支持64位,这里就遇到了一个问题,今天在进行编译的时候,开始全部用的是21,结果报错:

error: undefined reference to 'signal'

error: undefined reference to 'stpcpy'

具体原因:

在android-19 以前都是有这些内部方法的定义的,但是从android-21后没有定义此方法了。

三、设置NDK_HOME环境变量

在做Android静态库编译前,要修改/etc/profile,更新环境变量;

四、编译NDK

ndk-build

LOCAL_SHARED_LIBRARIES :=

ifeq (${TARGET_ARCH_ABI},armeabi)
    TOOLCHAIN_NAME=arm
else ifeq (${TARGET_ARCH_ABI},armeabi-v7a)
    TOOLCHAIN_NAME=arm
else ifeq (${TARGET_ARCH_ABI},arm64-v8a)
    TOOLCHAIN_NAME=arm64
else
    TOOLCHAIN_NAME=${TARGET_ARCH_ABI}
endif

LOCAL_LDLIBS :=
	LOCAL_MODULE    := EasyRTSPClient
	LOCAL_C_INCLUDES += ${LOCAL_PATH}/RTSP/Include
	LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Include
	LOCAL_LDLIBS += -L$(LOCAL_PATH)/RTSP/Android/$(TOOLCHAIN_NAME) -leasyrtspclient
	LOCAL_CFLAGS += -D__RTSP__

LOCAL_LDLIBS += -llog
LOCAL_LDLIBS += -L$(STL_PATH) -lgnustl_static

APP_CPPFLAGS += -fexceptions

include $(BUILD_SHARED_LIBRARY)

!!!注意:有些博客铁定不要信,比较坑,比如有些博客中描述的在Android.mk中加入LOCAL_ALLOW_UNDEFINED_SYMBOLS := true,这种属于掩耳盗铃,害人不浅!!!

其他的后续再做补充;

更多流媒体音视频资源

EasyDarwin开源流媒体服务器:www.EasyDarwin.org

EasyDSS高性能互联网直播服务:www.EasyDSS.com

EasyNVR安防视频可视化服务:www.EasyNVR.com

EasyNVS视频综合管理平台:www.EasyNVS.com

EasyNTS云组网:www.EasyNTS.com

EasyGBS国标GB/T28181服务器:www.EasyGBS.com

EasyRTC视频会议解决方案:www.EasyRTC.cn

Copyright © TSINGSEE.com Team 2012-2019

青犀TSINGSEE

猜你喜欢

转载自blog.csdn.net/xiejiashu/article/details/95674941