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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章