使用Homebrew编译iOS linphone SDK

原文请点击这里

写在前面的废话:

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

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

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

开始正题

前期需要

Xcode command line tools、Git

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

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

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

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

写在后面的话

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

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

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的时候就不会再次对已经编译好的进行再次编译,可以省下好多时间。唉,啥也别说了,先让我哭一会去 ???????????

┴─┴︵╰(‵□′╰)

转载请注明出处

最后祝大家好运!

时间: 2024-08-29 09:25:28

使用Homebrew编译iOS linphone SDK的相关文章

unity 引入 ios 第三方sdk

原地址:http://blog.csdn.net/u012085988/article/details/17785023 unity开发中ios应用时,要想成功引入第三方sdk,首先得知道c#与object-c如何交互.这里有篇博文介绍了unity开发中,如何实现c#与oject-c互相调用. http://blog.csdn.net/u012085988/article/details/17761433 下面介绍下unity开发ios应用中,引入第三方sdk的流程: 1.将sdk中要用到的接口

编译ios版本的librtmp+openssl

http://blog.csdn.net/cjj198561/article/details/28955461 编译librtmp需要先编译openssl,因为librtmp依赖openssl 首先编译openssl: 把以下内容保存为shell脚本: #!/bin/sh VERSION="1.0.1h" #指明openssl的版本信息,比如下载的是openssl-1.0.1h.tar.gz那么对于就填写1.0.1h SDKVERSION="7.1" #指明ios

iOS 9 sdk bitcode

今天试着用Xcode 7 beta 3在真机(iOS 8.3)上运行一下我们的工程,结果发现工程编译不过.看了下问题,报的是以下错误: 1 ld: '/Users /**/ Framework/SDKs/PolymerPay/Library/mobStat/lib**SDK.a(**ForSDK.o)' does not contain bitcode. You must rebuild it  with  bitcode enabled (Xcode setting ENABLE_BITCOD

使用xcodebuild命令行编译iOS应用遇到的一个错误及解决办法

今天使用自动化生成 iphone App时遇到一个奇怪问题,Xcode编译是好的,但xcodebuild命令行编译iOS编译报下面的错误,在stackoverflow上没有搜到相关的信息,看了搞iOS开发的都不用命令行工具啊.仔细分析错误信息后,找到的解决方法是在工程目录的Frameworks下面删除CoreFoundation.framework /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolc

iOS Base SDK & Deployment Target 区别&设置

今天突然出了个小毛病,deployment target 的版本 > base sdk 的版本, 处警告了,,,看了下资料 Xcode为开发者提供了两个可配置的设置:第一个是Base SDK,第二个是iOS的Deployment Target.通过配置这两个参数可定制应用的功能以及可运行的设备和操作系统版本. 打开配置界面的操作如下: 选择程序的工程文件. 选中工程文件的-Build Settings-选项,直接搜索-Base SDK-和-Deployment Target-就行,找挺麻烦的比较

【Unity游戏开发】接入UWA_GOT的iOS版SDK以后无法正常出包

一.正文 问: RT,最近有看到UWA_GOT工具新增了iOS版本的支持,于是下载了最新的工具包进行了接入测试.是按照文档直接将UWA_GOTv2.0.1_iOS.unitypackage导入进了Unity项目内,并且做了配置.但是发现添加了UWA_GOT插件以后iOS上不能正常出包,总是卡在xcodebuild archive这一步:报错信息如下: ** ARCHIVE FAILED ** The following build commands failed: Check dependenc

IOS Vuforia SDK学习笔记

最近可能工作会用到关于AR方面的东西 所以找了一下有名气的AR库 发现2个:Metaio和Vuforia 先说说Metaio 我看了看网上的反应 好像这个库反响不错 用的人蛮多的.但是悲催的是 我7月1号去看的时候已经无法注册新用户了.没办法用 因为它被苹果收购了,也不知道该高兴还是该忧伤  好像目前是没办法用了.只好找了别的,比如:Vuforia Vuforia是个啥? Vuforia™是Qualcomm Connected Experiences, Inc.的产品.它是一款针对移动设备开发增

cocos2d-x + Lua接入iOS原生SDK的实现方案[转]

相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我做过项目中接入iOS原生SDK实现方案的一个总结,在这里分享给大家,希望对自己和大家的开发工作都有帮助. 在展开正文之前,先做几点说明: 1.我这里说的iOS原生SDK是指那些完全用Objective-C语言开发,为原生iOS程序设计的SDK.swift很好很强大,不过我还没用过,惭愧,不过语言终归

开发者所需要知道的 iOS 10 SDK 新特性

转自:https://onevcat.com/2016/06/ios-10-sdk/ 写的很好啊.哈哈哈 总览 距离 iPhone 横空出世已经过去了 9 个年头,iOS 的版本号也跨入了两位数.在我们回顾过去四五年 iOS 系统的发展的时候,不免感叹变化速度之快,迭代周期之短.iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 里的分屏多任务特性等等.Apple 近年都是在 WWDC 发布新的系统和软件,然后