PJSIP2.6版本 CentOS6.4编译Android库及其demo工程

PJSIP2.6版本 CentOS6.4编译Android库及其demo工程

官方编译过程:点击打开链接

1、准备材料:

android-ndk-r10e:这个版本编译比较适合,更高级的版本在PJ2.6中有问题,需要对比更新Make文件,或者直接用最新版本。链接:点击打开链接

openh264:源码编译安装android库,注意用1.6版本,新版本不确定API是否改动,链接:点击打开链接

2、准备工作

创建用户配置文件config_site.h,路径:pjlib/include/pj/,可参考config_site_sample.h文件android部分。

如果程序从windows拷贝过来的,把根目录下所有config配置文件添加执行权限:

chmod +x config*

chmod +x aconfig*

3、开始编译

(1)导出NDK路径,示例

# export ANDROID_NDK_ROOT=/exdisk/Android/android-ndk-r10e

(2)配置CPU架构类型及SDK版本,示例

# TARGET_ABI=armeabi-v7a APP_PLATFORM=android-19 ./configure-android --use-ndk-cflags --with-openh264=/exdisk/Android/openh264-1.6.0-new/openh264-1.6.0/android/armeabi-v7a

注意红框内是重点,上一个表示openh264配置正确(视频功能可用)


(3)开始编译

# make dep && make

正常结果


(4)swig编译so库及java封装代码

# cd pjsip-apps/src/swig/
# make

完毕!

so库路径:java/android/app/src/main/jniLibs/armeabi/libpjsua2.so

java封装代码:java/android/app/src/main/java/org/pjsip/

此android示例工程可用android studio进行编译运行。



问题及解决办法:

1、在尝试多个ndk配置后,编译一直出现莫名其妙的错误,提示找不到依赖项

原因:每次config后生成依赖隐藏文件.depend.XXX,当文件存在时,不会覆盖新的

解决:尝试清空依赖配置make distclean 、make realclean

2、Android studio编译提示错误找不到srand及rand定义

原因:ndkr10配合指定android-21会出现,应该是ndk的bug

解决:换成android-19即可

3、config出现C编译器check失败(自己遇到的),查看config.log发现提示sodium库找不到

原因:之前为其他项目编译了zeromq,其中用到新版本的libsodium,源码安装后在/usr/local/lib下生成了so库及.a静态库,config检验编译脚本在检查到so库后发现不兼容,忽略掉了导致失败。

解决办法:删除此目录下的libsodium.so即可

4、多次倒腾(新老版本来回编译)后提示莫名其妙的错误,比如宏定义找不到,但是代码头文件中确实存在

原因:编译检索路径中包含/usr/local/下的include和lib,会优先找到这里的头文件及静态库进行编译,如果此目录下生成的文件与当前编译的版本有冲突,则出现各种莫名错误。

解决办法:删除/usr/local/include目录下所有与pj相关的文件,及/usr/local/lib中的pj相关库文件

5、看官来补充一些踩坑经验?

相关文章
相关标签/搜索