日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jrtplib库移植到android上

發(fā)布時間:2024/8/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jrtplib库移植到android上 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于工作中需要用到rtp協(xié)議,java暫時沒有比較好的開發(fā)框架,參考了其他的一些博文,自己摸索著編譯了jrtplib庫,在此記錄一下。

編譯環(huán)境:
Ubuntu14.2

準備工作:
1、安裝NDK;
2、安裝CMake。
linux下安裝cmake,可執(zhí)行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 文件名)
    ③編輯內(nèi)容(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 文件名)
    ⑦命令行執(zhí)行android.sh腳本(./android.sh)即可在當前目錄的android-build目錄下得到相關頭文件和庫。

  • 編譯jrtplib庫
    ①步驟同編譯jthread,解壓文件、新建執(zhí)行文件,寫入內(nèi)容;
    ②注意android.sh內(nèi)容:
    需要增加jthread的支持,以及l(fā)ibjrtp.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)
    ④編譯運行

  • 最后生成的動態(tài)和靜態(tài)鏈接庫文件就可以用到android項目里面做開發(fā)了。
  • 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上的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。