由于工作中需要用到rtp协议,java暂时没有比较好的开发框架,参考了其他的一些博文,自己摸索着编译了jrtplib库,在此记录一下。

编译环境:
Ubuntu14.2

准备工作:
1、安装NDK;
2、安装CMake。
linux下安装cmake,可执行sudo apt-get install cmake安装。
(可参考cmake升级)

编译步骤:

  1. 下载相关lib库,本文使用jrtplib-3.11.1和jthread-1.3.3(注:jrtplib引用了jthread的线程,所以要使用jthread库)jthread
  2. 编译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目录下得到相关头文件和库。

  1. 编译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)
④编译运行

  1. 最后生成的动态和静态链接库文件就可以用到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上相关推荐

  1. Linux程序移植到Android上

    序言: 由于本人还是比较偏重于先说明原理在说明实际操作步骤,要知其然更要知其所以然,如下图所示: 传统的linux系统中的程序基本都依赖于glibc(至于什么是glibc可以百度去),而右边AOSP( ...

  2. 轻巧的汉字转拼音库 TinyPinyin 在Android上的使用

    最近发现一个相当轻巧,运行速度很快的汉字转拼音库--TinyPinyin,这个汉字转拼音库比上一篇讲述列表按照A-Z的规则排序的文章所使用的汉字转拼音库运行速度还要快10倍以上. 主要特性 生成的拼音 ...

  3. 交叉编译 for arm-linux-gcc... no,QT4.8.6、tslib库移植到arm上配置出错!求大神指点

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统:Ubuntu14.04 LTS ; Qt版本:Qt4.8.6 for embedded 交叉编译器:arm-linux-gcc-v6-vfp-2 ...

  4. STM32 Hal库移植到GD32上遇到的问题

    问题一描述:CAN初始化就返回到Error_Handler,无法初始化通过. 经过单步调试,程序一直while ((hcan->Instance->MSR & CAN_MSR_SL ...

  5. 简单的Android视频转码器[1]:把FFMpeg移植到Android

    1 项目介绍 1.1 项目介绍 FFMpeg是做音视频开发的同学都会接触的一个开源项目,现将其移植到Android上,写一个简单的视频格式转码工具,作为自己Android jni开发的一个入门学习和A ...

  6. android loadsvm raw,OpenCV机器学习:Android上利用SVM实现手写体数字识别

    这篇博客是之前那篇在win7上用OpenCV的SVM分类器做MNIST手写数字识别的后续.用MNIST数据集做SVM训练和测试的细节可以移步那篇博客进行了解. 0.开发环境 这篇文章的思路是将Wind ...

  7. Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图

    六种方法分别是:基于RGB分割,基于RG同道的分割,ycrcb+otsu(ostu可以参考http://blog.csdn.net/onezeros/article/details/6136770, ...

  8. 基于glibc的程序在android上的移植

    如何将Linux中现有的众多资源以最小代价移植到android是很多开发人员关注的,下面这篇文章讲了一个比较取巧的方法,我试验了一下,最基本的hello world可以跑,但是复杂的大型程序要考虑很多 ...

  9. Android x86的arm兼容库移植--初步分析及尝试手动移植houdini/ndk_translation

    适用于x86架构的安卓5.0以上需要root,或者离线改文件,但并非全部适用:本文仅为个人经验,未涵盖的地方需要自行探索. 手动移植Android x86的arm兼容库(houdini/ndk_tra ...

  10. FFmpeg在Android上的移植优化步骤

    从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的.如今最火的智能手机操作系统Android上的很多第三方视频播放器也是基于FFmpeg实现全格式支持.由于A ...

最新文章

  1. 解决ubuntu14.04下Qt 5.3.1下的QtCreator fcitx,ibus不能输入中文
  2. pyqt5切换python版本_PyQt5每天必学之切换按钮_python
  3. Ansible第二篇:ansible-playbook
  4. jsx中的注释的写法
  5. 产品研发过程管理专题——产品需求分析原则二
  6. 「深度」5G,真的有必要在2020年占领我们吗?
  7. 教你利用腾讯云cdn加速网站静态资源
  8. 新学期个人作息时间安排
  9. 宝塔用ip+端口访问服务器时出现无法访问此网站
  10. android修改图片(修改图片大小,图片旋转,图片平移)
  11. 电感设计中的细节问题:磁芯损耗、线圈设计
  12. VsCode中运行HTML页面时出现乱码
  13. es数据库查询API
  14. 限流与代理网关集成调研及应用
  15. 【UE4 C++】 UE4 C++ 入门(无参考项目)——技术宅阿棍儿 学习笔记
  16. Shopify和其他电子商务平台上的微数据
  17. lightroom 闪退_子意老师Lightroom从入门到精通系统课程
  18. 如何移除电路板上的元器件?
  19. Android百度地图实例详解之仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,轨迹回放,导航等)
  20. off文件格式(Object File Format)

热门文章

  1. EndnoteX8教程学习(一)
  2. 广州科源980tc数控系统说明书_广州数控GSK980TC3车床数控系统 操作轴名
  3. VDbench 参数信息
  4. C语言段错误的有用总结
  5. 工具类官网Web原型制作分享-Adobe
  6. 概率图模型之贝叶斯网络的理解与应用
  7. 使用预计算实时全局光照优化照明-项目介绍
  8. 使用FireBird数据库基本知识
  9. 【pwn】记一道shellcode侧信道攻击
  10. 伺服电机选型时,惯量匹配和惯量比的问题