亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS之PJSIP筆記(一)編譯多平臺支持的靜態庫

2019-11-14 20:21:49
字體:
來源:轉載
供稿:網友

好久沒有寫博客了,這也算是我步入新工作后的第一篇技術博文吧。在進入新公司前,早就有了技術層進入下一個迭代的準備,但很多事情是意想不到的,就像我以 C# 程序員的身份面試入職的,而今卻是一個全職的 IOS 開發。從 C# 到 Objective-C 的切換,還是有不少成本的,加上今年又推出了 Swift,以后要學習的路是漫長的,其實,學習的路本身就是漫長的,不應該滿足于一個階段和特定領域。對我而言,語言的切換,已經太常見了,學習一門語言是很容易的事情,但,完全的掌握它,卻不是易事,就像去摸清一個陌生人的脾氣一樣。有點扯遠了,還是進入今天的正題吧!

PJSip,如果你不知道它是什么,那么說明你無需使用它,那也就沒必要繼續看我的這篇文章了。由于項目中需要使用到 VOIP,而對比下來,使用 SIP 實現的代價是相對小的,在 Android 里,谷歌內置了對 SIP 的支持,IOS 中就沒這么好運了,于是乎找到了 PJSIP,這是一個純 C 的庫,實現的相當漂亮。在網絡上找了很久,也沒有找到適合我這種的入門級教程,在我的摸索和努力下,終于搞出點名堂來了。那么,恭喜你,你不用走我走過的彎路了。

下面正式開始,一步步來:

第一步:下載

首先,去官網下載源代碼,這里推薦下載 .tar.bz2 的包,下載完成后,找到對應的目錄,用 tar 或者圖形化操作來解壓,這里我用命令行的方式來操作:

$ tar -jxvf pjPRoject-2.2.1.tar.bz2

 

第二步:編譯

首先,要在 pjlib/include/pj/ 目錄下,建立一個 config_site.h 的文件,切換到該目錄下,用 vi 或者 touch 一個文件:

$ cd pjlib/include/pj/$ vi config_site.h

按照官方的說明文檔,我們文件內容定義如下:

#define PJ_CONFIG_IPHONE 1#include <pj/config_site_sample.h>

OK,保存,切換回主目錄下(也就是有pjlib、pjmedia、pjnath等目錄的文件夾),這時候我們就可以編譯了,還有個前提,你必須安裝了 XCode 的 Command Line Tools(XCode –> Preferences –>Downloads)。

i386

首先編譯模擬器平臺的靜態庫,依次執行下面這三句:

$ export DEVPATH=/applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer$ ARCH="-arch i386" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone$ make dep && make clean && make

OK,沒有什么問題的話,你模擬器版本的靜態庫就編譯完成了,它們存在于:

  • pjlib/lib
  • pjlib-util/lib
  • pjmedia/lib
  • pjnath/lib
  • pjsip/lib
  • third_party/lib

這些,是在以后的 SIP 開發中,必須要使用到的靜態庫,目前該庫只支持模擬器(可使用 lipo –info 命令來查看,只支持 i386),所以,我們將其拷貝出來,當然,我已經為你寫好拷貝的腳本了:

#!/bin/bashPJLIB_PATH="./lib/$1/pjlib"PJLIB_UTIL_PATH="./lib/$1/pjlib-util"PJMEDIA_PATH="./lib/$1/pjmedia"PJNATH_PATH="./lib/$1/pjnath"PJSIP_PATH="./lib/$1/pjsip"THIRD_PARTY="./lib/$1/third_party"echo "start coping to $1"rm -rf $PJLIB_PATHrm -rf $PJLIB_UTIL_PATHrm -rf $PJMEDIA_PATHrm -rf $PJNATH_PATHrm -rf $PJSIP_PATHrm -rf $THIRD_PARTYmkdir -p $PJLIB_PATHmkdir -p $PJLIB_UTIL_PATHmkdir -p $PJMEDIA_PATHmkdir -p $PJNATH_PATHmkdir -p $PJSIP_PATHmkdir -p $THIRD_PARTYcp -r ./pjlib/lib/ $PJLIB_PATHcp -r ./pjlib-util/lib/ $PJLIB_UTIL_PATHcp -r ./pjmedia/lib/ $PJMEDIA_PATHcp -r ./pjnath/lib/ $PJNATH_PATHcp -r ./pjsip/lib/ $PJSIP_PATHcp -r ./third_party/lib/ $THIRD_PARTYecho "copy done"

將該腳本保存為 copylibs.sh 存放到主目錄下(你應該知道主目錄在哪吧!),然后執行:

$ ./copylibs.sh i386

如果提示權限不夠,那么使用 chmod 777 copylibs.sh 來賦予該文件最大的訪問權限,執行完后,所有生成的靜態庫,都被拷貝到主目錄下 lib 目錄中的對應位置。

armv7

下面繼續編譯 armv7 版的庫,關閉剛剛的那個控制臺,注意,是全部關閉后再進入,然后到主目錄依次執行下面的命令:

$ ARCH='-arch armv7' ./configure-iphone$ make dep && make clean && make$ ./copylibs.sh armv7

armv7s

現在編譯 armv7s 版本的庫,這次不用關閉控制臺了,直接依次執行下面的命令(有報錯誤,但都是示例項目編譯出錯,和靜態鏈接庫文件沒關系):

$ ARCH='-arch armv7s' ./configure-iphone$ make dep && make clean && make$ ./copylibs.sh armv7s

arm64

最后,我們完成 arm64 版本庫的編譯:

$ ARCH='-arch arm64' ./configure-iphone$ make dep && make clean && make$ ./copylibs.sh arm64

第三步:合并靜態鏈接庫

好了,現在我們需要的庫都已經被拷貝到 lib 目錄下了,它目前應該是這樣的:

image

對的,這底下有一個 mix.sh,當然,這也是我為你寫好的腳本:

#!/bin/bashOUPUT_PATH="./mixed/"XLIPO="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo"  for dir in armv7/*do    LIB_NAME=${dir##*/}    LIB_OUTPUT=${OUPUT_PATH}$LIB_NAME    rm -rf $LIB_OUTPUT    mkdir -p $LIB_OUTPUT    for subdir in ${dir}/*    do        AFILE=${subdir##*/}        ARMV7_FILE="./armv7/$LIB_NAME/$AFILE"        ARMV7S_FILE="./armv7s/$LIB_NAME/$AFILE"        ARM64_FILE="./arm64/$LIB_NAME/$AFILE"        I386_FILE="./i386/$LIB_NAME/$AFILE"        echo "start mixing file: $AFILE"                ${XLIPO} -arch armv7 $ARMV7_FILE -arch armv7s $ARMV7S_FILE -arch arm64 $ARM64_FILE -arch i386 $I386_FILE -create -output ${LIB_OUTPUT}/$AFILE    donedoneecho "all mixed done"

將上面的腳本,保存到 lib 目錄下 mix.sh 中,控制臺中,cd 切換到 lib 目錄下,然后執行:

./mix.sh 

OK,現在一切都完成了,在 lib 目錄下會多出個 mixed 目錄,該目錄底下的所有庫,都是包含了上訴各種架構版本信息的,可以使用 lipo 來驗證下:

image

注意,無論是合并還是查看,都要使用 Xcode 下的 lipo,mac 自帶的那個 lipo 不支持。

如果你覺得,親自動手太麻煩的話,那么這里有一個已經幫你編譯好的版本,直接下載使用即可:

https://github.com/chebur/pjsip

不過,我還是推薦你自己動手來一遍,自己弄出來的,使用起來才更有意思嘛,呵呵~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019年好看中文字幕视频| 亚洲国产欧美在线成人app| 欧美亚洲在线视频| 国产日韩在线看| 欧美日韩久久久久| 欧美理论在线观看| 久久综合免费视频| 狠狠色狠色综合曰曰| 不卡av电影在线观看| 国产精自产拍久久久久久蜜| 亚洲乱码国产乱码精品精| 亚洲欧洲国产一区| 国产日韩在线观看av| 久久久久久久久中文字幕| 国产一区二区成人| 国产精品a久久久久久| 日韩免费观看高清| 色阁综合伊人av| 日韩电影中文字幕在线观看| 亚洲精品资源在线| 日韩欧美一区二区三区久久| 国产精品va在线播放| 中文字幕一区二区三区电影| 精品一区二区电影| 俺去了亚洲欧美日韩| 久久亚洲精品成人| 亚洲精品国产精品国自产观看浪潮| 国产精自产拍久久久久久蜜| 国产精品一区二区三区久久| 中文字幕亚洲综合久久筱田步美| 国产精品海角社区在线观看| 奇米4444一区二区三区| 亚洲欧美在线看| 欧美日韩美女在线| 国产男女猛烈无遮挡91| 亚洲男人第一av网站| 69av成年福利视频| 日韩激情av在线播放| 国产香蕉97碰碰久久人人| 91精品视频在线免费观看| 97久久精品视频| 国内精品伊人久久| 色偷偷888欧美精品久久久| 欧美精品xxx| 777午夜精品福利在线观看| 日韩欧美第一页| 久久精品视频中文字幕| 成人乱色短篇合集| 日本国产高清不卡| 成人精品aaaa网站| 亚洲美女精品久久| 2019中文字幕全在线观看| 欧美午夜精品久久久久久浪潮| 97色在线视频观看| 国产精品久久久久999| 狠狠躁夜夜躁人人爽超碰91| 亚洲精品网址在线观看| 欧美成人免费网| 久久精品久久精品亚洲人| 欧美一区二区视频97| 爱福利视频一区| 欧美视频精品一区| 96pao国产成视频永久免费| 色综合伊人色综合网站| 91在线色戒在线| 久久精品99久久久久久久久| 日韩av影院在线观看| 高清日韩电视剧大全免费播放在线观看| 欧美日韩国产中文精品字幕自在自线| 欧美精品在线免费观看| 成人免费视频97| 国产精品美女呻吟| 亚洲女人被黑人巨大进入al| 日本不卡视频在线播放| 中文字幕日韩有码| 国产一区二区三区丝袜| 国语自产精品视频在线看抢先版图片| 97久久久免费福利网址| 国产成人av网| 日韩在线观看免费全| 97精品国产97久久久久久免费| 亚洲一区第一页| 精品毛片三在线观看| 日韩有码片在线观看| 98午夜经典影视| 国产精品一区二区久久精品| 国产美女精品视频| 国产精品福利无圣光在线一区| 亚洲午夜久久久久久久| 久久久久久综合网天天| 久久精品久久久久久| 国产精品爽爽爽爽爽爽在线观看| 日韩欧美精品免费在线| 日韩欧美aⅴ综合网站发布| 国产91露脸中文字幕在线| 91精品国产91久久久久久最新| 在线观看成人黄色| 亚洲美女精品久久| 高清欧美性猛交xxxx黑人猛交| 国产性色av一区二区| 日本高清+成人网在线观看| 精品久久久久久久久中文字幕| 亚洲国产成人久久| 精品国产福利视频| 亚洲女人天堂成人av在线| 欧美国产视频日韩| 中文字幕v亚洲ⅴv天堂| 精品亚洲一区二区三区在线播放| 亚洲精品久久久久久久久久久久久| 国产日韩欧美在线观看| 91色视频在线观看| 2019中文字幕在线观看| xxxx欧美18另类的高清| 亚洲图片制服诱惑| 国产精品日本精品| 亚洲成人av中文字幕| 色婷婷综合成人av| 国产日韩精品在线播放| 国产一区二区三区免费视频| 久久久精品视频成人| 精品国产电影一区| 国产精品日韩电影| 国产精品老牛影院在线观看| 日韩在线观看免费全集电视剧网站| 菠萝蜜影院一区二区免费| 亚洲精品国产免费| 成人女保姆的销魂服务| 久久久欧美一区二区| 国内精品久久久久久久久| 久久久久久久久久久国产| 草民午夜欧美限制a级福利片| 亚洲精品在线91| 亚洲欧美日韩中文视频| 黄色一区二区在线观看| 日韩电影在线观看中文字幕| 91久久精品国产91久久| 国产精品久久久一区| 日本精品在线视频| 第一福利永久视频精品| 国产精品亚洲第一区| 亚洲视频在线观看视频| 日韩国产精品亚洲а∨天堂免| 亚洲字幕一区二区| 97avcom| 精品久久久久久久久久久久久| 久久精品视频在线播放| 精品一区二区三区四区| 精品中文字幕乱| 亚洲午夜色婷婷在线| 欧美性xxxx极品hd满灌| 国产精品va在线播放我和闺蜜| 91极品女神在线| 亚洲女人天堂色在线7777| 日韩**中文字幕毛片| 日韩av在线一区二区| 91在线免费观看网站| 国产精品视频地址| 久久色免费在线视频| 97精品一区二区视频在线观看| 久久视频在线看| 青青久久aⅴ北条麻妃| 2019亚洲男人天堂| 欧美人与性动交| 日本午夜在线亚洲.国产|