這是一篇開發的日常記錄,現在發現做備忘越來越很重要了,一件事情幾個月前做的,再次重新做一遍,尤其是這類的環境搭建,整個過程的坑又得重新跳一遍,太耗時了,這次先大概記錄下來,方便後續回溯:
一、NDK選擇
-
Windows採用的是:android-ndk-r13b-windows-x86_64;
-
Linux採用的是:android-ndk-r13-linux-x86_64
二、靜態庫交叉編譯環境
- unzip android-ndk-r13-linux-x86_64;
- 到 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