前提linux下安装cmake,可执行sudo apt-get install cmake安装。(本文参照https://github.com/jimjh/JRTPLib-for-Android,作者在mac系统编译通过)
1,下载相关lib库,本列使用jrtplib-1.9.0和jthread-1.3.0(注:jrtplib引用了jthread的线程,所以要使用jthread库)
2,解压后得到文件夹jrtplib-1.9.0和jthread-1.3.0。
3,在jthread-1.3.0文件夹下建立android.sh构建脚本.内容如下(备注:ndk路径和C_FLAGS请改为自己系统的正确路径)
#!/bin/sh
#
#
# Builds the JThread library for Android
export NDK_ROOT="/home/lch/Desktop/android-ndk-r9d"
export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/:${PATH}"
SYS_ROOT="${NDK_ROOT}/platforms/android-8/arch-arm"
PREF="arm-linux-androideabi-"
OUT_DIR="`pwd`/android-build"
C_FLAGS="-lstdc++ -lsupc++ \
-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include \
-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include \
-L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi"
set -e
export CC="${PREF}gcc --sysroot=${SYS_ROOT}"
export CXX="${PREF}g++ --sysroot=${SYS_ROOT}"
export LD="${PREF}ld --sysroot=${SYS_ROOT}"
export CPP="${PREF}cpp --sysroot=${SYS_ROOT}"
export AS="${PREF}as"
export OBJCOPY="${PREF}objcopy"
export OBJDUMP="${PREF}objdump"
export STRIP="${PREF}strip"
export RANLIB="${PREF}ranlib"
export CCLD="${PREF}gcc --sysroot=${SYS_ROOT}"
export AR="${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 install
cd ${OUT_DIR}/lib && \
${AR} -x libjthread.a && \
${CXX} ${C_FLAGS} -shared -Wl,-soname,libjthread.so -o libjthread.so *.obj && \
rm *.obj
exit 0
4,命令行执行android.sh脚本即可在当前目录的android-build目录下得到相关头文件和库。
5,编译jrtplib库,在jrtplib-1.9.0文件夹下建立android.sh构建脚本.内容如下(备注:ndk路径和C_FLAGS请改为自己系统的正确路径,打开CMakeLists.txt,找到并注释掉: add_subdirectory(examples),因为在编译例子的时候会有错误 ,我们只需要这个库)
#!/bin/sh
#
#
# Builds the JRTPLib library for Android
export NDK_ROOT="/home/lch/Desktop/android-ndk-r9d"
export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/:${PATH}"
SYS_ROOT="${NDK_ROOT}/platforms/android-8/arch-arm"
PREF="arm-linux-androideabi-"
C_FLAGS=" -lc \
-lgcc \
-lstdc++ -lsupc++ \
-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include \
-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include \
-L../jthread-1.3.0/android-build/lib \
-L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi"
OUT_DIR="`pwd`/android-build"
set -e
export CC="${PREF}gcc --sysroot=${SYS_ROOT}"
export CXX="${PREF}g++ --sysroot=${SYS_ROOT}"
export LD="${PREF}ld --sysroot=${SYS_ROOT}"
export CPP="${PREF}cpp --sysroot=${SYS_ROOT}"
export AS="${PREF}as"
export OBJCOPY="${PREF}objcopy"
export OBJDUMP="${PREF}objdump"
export STRIP="${PREF}strip"
export RANLIB="${PREF}ranlib"
export CCLD="${PREF}gcc --sysroot=${SYS_ROOT}"
export AR="${PREF}ar"
cmake \
-DCMAKE_SYSTEM_NAME="Generic" \
-DCMAKE_CXX_FLAGS="${C_FLAGS}" \
-DCMAKE_FIND_ROOT_PATH="${SYS_ROOT}" \
-DJTHREAD_INCLUDE_DIRS="../jthread-1.3.0/android-build/include" \
-DJTHREAD_LIBRARIES="../jthread-1.3.0/android-build/lib" \
-DCMAKE_PREFIX_PATH="../jthread-1.3.0/android-build" \
-DCMAKE_INSTALL_PREFIX="${OUT_DIR}" .
make && \
make install
cd ${OUT_DIR}/lib && \
${AR} -x libjrtplib.a && \
${CXX} ${C_FLAGS} -shared -Wl,-soname,libjrtplib.so -o libjrtplib.so *.obj && \
rm *.obj
exit 0
6,命令行执行android.sh脚本即可在当前目录的 android-build目录下得到相关头文件和库。