生活随笔
收集整理的這篇文章主要介紹了
jrtplib库移植到android上
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于工作中需要用到rtp協議,java暫時沒有比較好的開發框架,參考了其他的一些博文,自己摸索著編譯了jrtplib庫,在此記錄一下。
編譯環境:
Ubuntu14.2
準備工作:
1、安裝NDK;
2、安裝CMake。
linux下安裝cmake,可執行sudo apt-get install cmake安裝。
(可參考cmake升級)
編譯步驟:
下載相關lib庫,本文使用jrtplib-3.11.1和jthread-1.3.3(注:jrtplib引用了jthread的線程,所以要使用jthread庫)jthread編譯jthread
①解壓文件(#tar -xvf *.tar.gz)
②新建一個android.sh文件(#touch 文件名)
③編輯內容(vim 文件名)。注意修改ndk路徑為自己本地路徑,同時注意版本號(4.9,android-14等,本地是否存在)
#!/bin/sh
#
#
# Builds the JThread library for Android
# 清空上次的編譯
make clean
#你自己的NDK路徑。
export NDK_ROOT="/home/dev/android-ndk-r14b"
export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/:${PATH}"
# 設置你的android平臺編譯器的版本 這里采用Android4.0
export SYS_ROOT=${NDK_ROOT}/platforms/android-14/arch-arm/
#編譯使用的toolchain
export TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
# 這個是輸出的路徑
PREF="arm-linux-androideabi-"OUT_DIR="`pwd`/android-build"
C_FLAGS="-lstdc++ -lsupc++ \-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include \-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include \-L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi"#set -eexport CC="${TOOLCHAIN}/bin/${PREF}gcc --sysroot=${SYS_ROOT}"
export CXX="${TOOLCHAIN}/bin/${PREF}g++ --sysroot=${SYS_ROOT}"
export LD="$${TOOLCHAIN}/bin/{PREF}ld --sysroot=${SYS_ROOT}"
export CPP="${TOOLCHAIN}/bin/${PREF}cpp --sysroot=${SYS_ROOT}"
export AS="${TOOLCHAIN}/bin/${PREF}as"
export OBJCOPY="${TOOLCHAIN}/bin/${PREF}objcopy"
export OBJDUMP="${TOOLCHAIN}/bin/${PREF}objdump"
export STRIP="${TOOLCHAIN}/bin/${PREF}strip"
export RANLIB="${TOOLCHAIN}/bin/${PREF}ranlib"
export CCLD="${TOOLCHAIN}/bin/${PREF}gcc --sysroot=${SYS_ROOT}"
export AR="${TOOLCHAIN}/bin/${PREF}ar"cmake \-DCMAKE_SYSTEM_NAME="Generic" \-DCMAKE_CXX_FLAGS="${C_FLAGS}"\-DCMAKE_FIND_ROOT_PATH="${SYS_ROOT}" \-DCMAKE_INSTALL_PREFIX="${OUT_DIR}" . && \make && \
make installcd ${OUT_DIR}/lib && \
${AR} -x libjthread.a && \
${CXX} ${C_FLAGS} -shared -Wl,-soname,libjthread.so -o libjthread.so *.obj && \
rm *.objexit 0
④src/pthread/jthread.cpp的130行,找到pthread_cancel(threadid);并注釋之,替換成 pthread_kill(threadid, SIGUSR1);
⑤打開CMakeLists.txt,注釋掉這一段:
# find_package(Threads)
# if (NOT CMAKE_USE_WIN32_THREADS_INIT)
# if (NOT CMAKE_USE_PTHREADS_INIT)
# message(FATAL_ERROR "Can find neither pthread support nor Win32 thread support")
# endif (NOT CMAKE_USE_PTHREADS_INIT)
# endif (NOT CMAKE_USE_WIN32_THREADS_INIT)
⑥給android.sh文件授權(chmod a+x 文件名)
⑦命令行執行android.sh腳本(./android.sh)即可在當前目錄的android-build目錄下得到相關頭文件和庫。
編譯jrtplib庫
①步驟同編譯jthread,解壓文件、新建執行文件,寫入內容;
②注意android.sh內容:
需要增加jthread的支持,以及libjrtp.a(低版本編譯用到的是libjrtplib.a)
#!/bin/sh
#
#
# Builds the JRTPLib library for Android
make clean
#你自己的NDK路徑。
export NDK_ROOT="/home/dev/android-ndk-r14b"
export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/:${PATH}"
# 設置你的android平臺編譯器的版本 這里采用Android4.0
export SYS_ROOT=${NDK_ROOT}/platforms/android-9/arch-arm/
#編譯使用的toolchain
export TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
# 這個是輸出的路徑
PREF="arm-linux-androideabi-"OUT_DIR="`pwd`/android-build"C_FLAGS=" -lc \-lgcc \-lstdc++ -lsupc++ \-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include \-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include \-L../jthread-1.3.3/android-build/lib \-L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi"#set -eexport CC="${TOOLCHAIN}/bin/${PREF}gcc --sysroot=${SYS_ROOT}"
export CXX="${TOOLCHAIN}/bin/${PREF}g++ --sysroot=${SYS_ROOT}"
export LD="$${TOOLCHAIN}/bin/{PREF}ld --sysroot=${SYS_ROOT}"
export CPP="${TOOLCHAIN}/bin/${PREF}cpp --sysroot=${SYS_ROOT}"
export AS="${TOOLCHAIN}/bin/${PREF}as"
export OBJCOPY="${TOOLCHAIN}/bin/${PREF}objcopy"
export OBJDUMP="${TOOLCHAIN}/bin/${PREF}objdump"
export STRIP="${TOOLCHAIN}/bin/${PREF}strip"
export RANLIB="${TOOLCHAIN}/bin/${PREF}ranlib"
export CCLD="${TOOLCHAIN}/bin/${PREF}gcc --sysroot=${SYS_ROOT}"
export AR="${TOOLCHAIN}/bin/${PREF}ar"cmake \-DCMAKE_SYSTEM_NAME="Generic" \-DCMAKE_CXX_FLAGS="${C_FLAGS}" \-DCMAKE_FIND_ROOT_PATH="${SYS_ROOT}" \-DJTHREAD_INCLUDE_DIRS="../jthread-1.3.3/android-build/include" \-DJTHREAD_LIBRARIES="../jthread-1.3.3/android-build/lib" \-DCMAKE_PREFIX_PATH="../jthread-1.3.3/android-build" \-DCMAKE_INSTALL_PREFIX="${OUT_DIR}" .make && \
make installcd ${OUT_DIR}/lib && \
${AR} -x libjrtp.a && \
${CXX} ${C_FLAGS} -shared -Wl,-soname,libjrtplib.so -o libjrtplib.so *.obj && \
rm *.objexit 0
③打開CMakeLists.txt,找到并注釋掉: add_subdirectory(examples)
④編譯運行
最后生成的動態和靜態鏈接庫文件就可以用到android項目里面做開發了。
Android.mk 文件編寫
include $(CLEAR_VARS)
LOCAL_MODULE := libjthread
LOCAL_SRC_FILES := ./jrtplib/lib/libjthread.a
include $(PREBUILT_STATIC_LIBRARY)LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libjrtplib
LOCAL_SRC_FILES := ./jrtplib/lib/libjrtplib.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := jrtptest
LOCAL_SRC_FILES := jrtptest.cpp
LOCAL_STATIC_LIBRARIES := libjrtplib
include $(BUILD_SHARED_LIBRARY)
Application.mk文件編寫
#對標準C++ stl庫的支持
#APP_STL := stlport_static
APP_STL := gnustl_static
總結
以上是生活随笔為你收集整理的jrtplib库移植到android上的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。