美文网首页
【转】使用Homebrew编译iOS linphone SDK

【转】使用Homebrew编译iOS linphone SDK

作者: xiao晖 | 来源:发表于2017-07-26 11:45 被阅读272次

    转自:使用Homebrew编译iOS linphone SDK
    原文请点击这里 :Building the Linphone SDK for iOS using Homebrew

    写在前面的废话:
    在经历了多次编译折磨的痛苦之后,还是决定翻译一下吧,为自己以后再次编译方便,也为了以后编译linphone的同学提供点方便。

    VoIP常见的实现方式有 pjsiplinphone等,pjsip编译较为简单,而且包要小很多。
    但是本人在编译pjsip添加 TLS 时,按照官方方式失败了,邮件联系pjsip官方也没有得到回复,本人比较愚钝,搜寻了好多资料也没有成功,最后只能放弃。
    开始编译 linphone。linphone编译相对困难,依赖库也较pjsip多很多,包也大很多。但是linphone编译后的源码给你直接提供了 TLS 选项和 SRTP(这里有小点问题,下面做解释)等。所以,如果你要是打算做VoIP的话,最好是先权衡一下选择哪一种。

    PS.本人英语比较菜,如果有翻译的不正确的地方还请留言,以便修正。thx!

    开始正题

    前期需要

    Xcode command line toolsGit

    首先我们先安装一下依赖库

    如果你看了官方的README你会发现,官方使用的是 Macports,但是这里我们使用 Homebrew 来代替。乍一看命令,似乎除了gmakeantlr以外所有的库都有了。此外,我们还需要gettext.
    (虽然在包libantlr里的 c 文件是可以用antlr

    我们先来安装一些依赖库:

    brew install coreutils automake autoconf libtool intltool wget pkgconfig cmake yasm nasm doxygen ImageMagick optipng libantlr3c gettext
    

    PS.看见了没?需要这么多的库~
    在安装Caveat的时候可能会有个警告:

    All commands have been installed with the prefix 'g'.
    If you really need to use these commands with their normal names, you
    can add a "gnubin" directory to your PATH from your bashrc like:
        PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
    

    好吧,我们来照着说明改一下:

    # temporarily add homebrews coreutils to the path
    $ export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
    

    此外,我们想知道刚才安装的 gettext 的版本,它默认是不连接的,或许当你安装完成以后你想断开链接:

    # temporarily link gettext
    $ brew link gettext --force
    

    安装antlr3
    我开放了 home-brew 的3.4版本 antlr 的 pull 请求。在这里,你只需要用这个3.4版本的antlr覆盖 /usr/local/Library/Formula/antlr.rb 即可。

    然后执行:

    $ brew install antlr
    # symlink into /usr/local/share/java/ so configure can find it
    $ mkdir -p /usr/local/share/java
    $ ln -s /usr/local/Cellar/antlr/3.4/antlr-3.4-complete.jar /usr/local/share/java/antlr3.jar
    

    安装gas-preprosessor.pl

    $ wget --no-check-certificate https://raw.github.com/yuvi/gas-preprocessor/master/gas-preprocessor.pl
    $ sudo mv gas-preprocessor.pl /usr/local/bin/
    $ chmod +x /usr/local/bin/gas-preprocessor.pl
    

    链接libtoolize到glibtoolize

    $ sudo ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
    

    链接host strings到模拟器SDK

    $ sudo ln -s /usr/bin/strings /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/strings
    

    链接/opt/local/bin to /usr/local/bin

    Macports把所有的东西都安装在了 /opt/local/bin 里,并且submodules/linphone下的autogen.sh脚本需要一些硬编码路径到intltoolize。如果找不到它,它就会鸟悄的失败了,之后会引发这样一个不起眼的错误:

    config.status: error: cannot find input file: `po/Makefile.in.in'
    所以我们把整个目录都链接过来(如果你已经有了一个/opt/local/bin目录,你可能只想符号链接intltoolize来代替):
    
    $ sudo mkdir /opt/local
    $ cd /opt/local && sudo ln -s /usr/local/bin
    
    编译SDK

    首先先得到源码

    先抓下项目的代码,还有子模块等。所以可能需要一段时间(PS.但愿你们公司的网不错,本人在下载源码的时候,下载了不下5次,最后是在所有人都下班以后的半夜里下载成功的):

    git clone git://git.linphone.org/linphone-iphone.git --recursive
    

    设置SDK版本
    找出哪个版本的SDK是你可以使用的:

    $ ls /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
    iPhoneOS7.1.sdk
    对我来说,7.1是可以用的。然后编辑inphone-iphone/submodules/build/iphone-config.site进行如下设置:
    
    SDK_VERSION_MAJOR=7
    SDK_VERSION=7.1
    

    (PS. LZ8.1设置的时候也是8和8.1,此处不太明白是什么意思。有明白的还请留言说明下,thx)

    编译

    $ cd linphone-iphone/submodules/build
    $ make all
    

    然后是漫长的等待……
    技术分享

    如果你编译成功的话,最后会出来这个东东:

    ***************************************************************************
    ***************************************************************************
    *****CAUTION, this liblinphone SDK is built using 3rd party GPL code ******
    *****Even if you acquired a proprietary license from Belledonne      ******
    *****Communications, this SDK is GPL and GPL only.                   ******
    *****To disable 3rd party gpl code, please use:                      ******
    *****make enable_gpl_third_parties=no                              ******
    ***************************************************************************
    ***************************************************************************
    

    赶紧打开项目试下是不是可以运行了!

    故障排除:
    如果遇到任何问题,仔细检查上面的每个步骤。
    再次运行建议运行

    $ make very clean
    在你执行make all之前,你首先得确定你已经做了一些修改。
    

    【Resources】

    一些很不错的博客,里面有大家遇到的问题以及解决问题的讨论
    http://shallwelearn.com/blog/build-linphone-for-iphone-and-ipad/
    Linphone开发人员的邮件列表
    http://lists.nongnu.org/archive/html/linphone-developers/
    Stackoverflow(这个不解释,如果你连这个都不知道你可以退出IT圈,进军娱乐圈了)
    http://stackoverflow.com/questions/tagged/linphone+ios
    </br>


    写在后面的话

    终于用蹩脚的英语翻译完了,如果你能一直看到这一行,那么恭喜你,你的忍耐程度非常棒,我相信你可以用你这么好的耐心在IT界会风生水起。

    由于我们的项目需要 TLSSRTP进行加密。所以我现在遇到的问题说一下:

    1.编译好的代码应该是不可以进行证书验证的,也就是说TLS会有问题。你需要在 LinphoneManager 类的startLibLinphone函数中加一句验证:

    linphone_core_verify_server_certificates(theLinphoneCore, NO);
    

    2.在项目测试的过程中发现我可以使用官方账号进行通话(iOS与iOS之间),但是不能与安卓的进行通话。
    也不能使用我们自己的服务器进行iOS和iOS间的通话。郁闷n久之后,后台跟我说,他的srtp是错的,需要重新编译。
    然后把安卓的 srtp 包导入进行重新编译的。
    (PS. 抱歉这里不能提供这个修改过的srtp包,因为里面修改的时候增加了一些我们自己的加密算法。望谅解)

    3.吐槽一下替换 srtp 包以后,执行了下 veay clean。然后再编译的时候就开始报错,报错都是关于srtp的,现在还在挣扎中。这里要吐槽的是,我执行完 clean之 后,做后台的linux大牛才说,可以直接 make不用clean,那样make的时候就不会再次对已经编译好的进行再次编译,可以省下好多时间。唉,啥也别说了,先让我哭一会去 ......

    </br>
    </br>
    转载请注明出处
    http://blog.csdn.NET/showhilllee/article/details/42966305

    最后祝大家好运!

    ====================== 2月4日补充说明 ============
    1、srtp(版本号1.4.5)在linphone(版本号3.7.4)已经对bug进行了修复。具体可查看版本号,路径为 linphone-iphone/submodules/externals/srtp/VERSION

    ====================== 5月13日补充说明 ============
    1、demo地址:http://download.csdn.net/detail/showhilllee/8688073

    ====================== 2016-09-12补充说明 ============
    Demo是15年年初的,根据大家的反映,好像已经不适用了。
    当初项目需要研究了一下,后来就没有再继续使用了。
    Demo仅供学习和参考。
    大家如果在使用过程中遇到什么问题可以留言,如果有找到解决方法的也麻烦留言一下。大家一起面对苦x的VoIP~

    所以暂时上传到百度网盘,需要下载的请前去下载。(如果连接失效了请留言告知)
    链接: https://pan.baidu.com/s/1nv6NB09 密码: cf5t

    相关文章

      网友评论

          本文标题:【转】使用Homebrew编译iOS linphone SDK

          本文链接:https://www.haomeiwen.com/subject/bebnkxtx.html