TakWolf 's Blog

Anima Game Code Repeat

TakWolf's avatar TakWolf

PJSIP 编译 Android 平台,报错:cannot locate symbol "rand" referenced by "libpjsua.so"

最近公司要实现一个IP电话的功能,选择了PJSIP这个框架。
服务端部分团队大牛已经搞完了,Android 这块还要实现一个 SIP 客户端。
安装官方文档编译Hello World,整个过程就是一个字:坑爹。

最开始是在 Windows 环境上编译,由于编译依赖于 Bash 命令以及 swig,还有坑爹的 Windows 和 Unix 换行符转换的问题,是在解决无力。
更换到 Ubuntu 之后编译通过了,在运行时报错:

1
cannot locate symbol "rand" referenced by "libpjsua.so"

但奇怪的是在 Android5.0 上运行却正常。
Google 上说是因为使用了64位 ndk 的原因,遂更换为32为 Ubuntu,问题仍未解决。

最后将 ndk 从 10r 更换到 9r,编译和运行都通过了。
猜测问题出现在 ndk 10r 的兼容性上。

吐槽一下 Android5.0 正式版有太多的兼容性问题。
ndk 10r 是匹配到 Android5.0 而推送的,估计也有兼容性问题。

经验和教训,简而言之就是以下几句话:

  • 别用 Windows 编译

  • 别用 Ubuntu 64位,使用32位,包括 ndk

  • 别用 ndk 版本号高于 r10,使用 r9 以下版本

我编译成功的环境配置:

  • Ubuntu-14.04.1-LTS-i386

  • PJSIP-2.3

  • ndk-r9d-linux-x86

编译后的代码在这里下载:PJSIP-Android-Compilation

不保证可用性,祝你好运!

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接: http://blog.takwolf.com/2014/12/03/pjsip-android-compilation/

没有能用的评论系统我也很无奈啊!

有问题请去这里讨论吧:

https://github.com/TakWolf/blog.takwolf.com/issues