osip和exosip在windows下的編譯靜態庫
3..編譯過程:
===================================================
文章可以任意轉載,但是請註明出處 http://hi.baidu.com/yangkaiii
===================================================
編譯osip,exosip協議棧的時候遇到很多的問題,不過終於通過了,現在將整個編譯的過程和其中遇到的問題詳細總結出來。
開發環境:Windows XP SP2 VC++ 6.0
(一)編譯osip的靜態連結庫(*.lib)和動態連結庫(*.dll),以便我們自己開發的程式能夠使用它們來成功編譯和執行。
1. 得到OISP的解析器開發庫(osipparser2.lib,osipparser2.dll):
Ø osipparser2.lib:
· 首先建立一個新的Win32靜態連結庫工程(Win32 Stastic Library),然後將oSIP版本*.*.*下的src目錄下的osipparser2目錄下的所有檔案都考到我們剛建立的工程的根目錄下,然後再在VC6上操作:Project->Add to Project->Files,將所有的源程式和標頭檔案都加入到工程內,然後儲存工程,。
· 再將oSIP原始碼包中的Include目錄下的osipparser2資料夾直接拷到VC6的安裝目錄的Include資料夾下(如:D:\Program Files\Microsoft Visual Studio\VC98\Include),或者在Tool->Options->Directories裡設定路徑也行(這樣就不用拷貝檔案了,直接把oSIP原始碼包所在的目錄加進來就可以了)。
· 多執行緒編譯,不然之後呼叫osip執行緒庫時會出錯。
ü 在Project->Setting->C/C++中“分類”一項中選擇“常規”,然後在“預處理程式定義”一項中,加入OSIP_MT,MT,NEW_TIMER三個巨集以支援多執行緒;
ü 在選擇“分類”項中的“Code Generation”,在“Use run-time library”中選擇“Multithread”,多執行緒編譯。
· 因為VC6自帶的開發庫太老了,之後再編譯exosip的時候會出現很多莫名其妙的錯誤,所以順便在這裡就先升級一下系統的的Platform SDK(可以從微軟的網站去下),安裝在F盤(F:\psdk include & lib[1]),然後在VC6中使用這個PSDK,在Tool->option->Directories裡設定,在“路徑”中加入“F:\psdk include & lib[1]\Include”即可。
·OK,現在可以編譯工程了(為了防止日後返工,所以這裡做了比較多的工作),編譯後在Debug資料夾得到了osipparser2.lib。
Ø osiparser2.dll:
· 與上面建立靜態連結庫的方法類似,不同的是要首先建立一個新的Win32動態連結庫工程(Win32 Dynamic-Link Library),然後按照上面所述步驟處理,最後編譯得到osipparser2.dll。
2. 得到OISP的協議棧開發庫(osip2.lib,osip2.dll):
· 同樣按照上述方法,分別建立動態連結庫工程和靜態連結庫工程,只是要拷貝的檔案換成了原始碼包中src目錄下的osip2資料夾下的檔案和include目錄下的osip2資料夾而已。
· 在編譯osip2.dll的時候可能會出錯,原因說是找不到連結庫,所以將前面編譯得到的osipparser2.lib檔案也考到這個新建的動態連結庫工程目錄下,並在VC6中操作:Project->Setting->Link中的Object/Library Modules欄中,在kernel32.lib,user32.lib。。。之後加上osipparser2.lib,儲存後再次編譯,可成功編譯osip2.dll。
至此,我們得到了完整的OSIP開發庫,使用時,只需要在我們的程式中包含OSIP標頭檔案,工程的連結引數中增加osip2.lib和osipparser2.lib即可。
(二).編譯eXosip的靜態連結庫:(exosip.lib)
由於oSIP是比較底層的SIP協議棧實現,新手較難上手,而官方的示例大都是一些虛擬碼,需要有實際的例子程式參考學習,而最好的例子就是同樣官方釋出的oSIP的擴充套件開發庫exosip2,使用exoSIP可以很方便地快速建立一個完整的SIP程式(只針對性地適用於SIP終端開發用,所以我們這裡只是用它快速開發一個SIP終端,用來更方便地學習oSIP,要想真正掌握SIP的開發,需要掌握oSIP並熟讀RFC文件才行,exoSIP不是我們的最終學習目的),通過成功編譯執行一個自己動手開發出的程式,再由淺入深應該是初學都最好的學習方法通過對使用exosip開發庫的使用建立自己的SIP程式,熟悉後再一個函式一個函式地深入學習exosip提供的介面函式,就可以深入理解osip 了,達到間接學習oSIP的目的,同時也能從eXoSIP中學習到正確使用oSIP的良好的程式設計風格和語法格式。
· 和之前描述的方法基本一致,首先建立Win32靜態連結庫工程,然後將eXosip原始碼包中的src目錄下的所有檔案都考到新建的工程目錄下,並且在VC6中加入這些檔案。
· 將原始碼包中的inlude資料夾也整個考到新建的工程目錄下。
· 按照上述方法,進行多執行緒編譯的設定;
· 按照上述的方法,設定PSDK的使用;
· 編譯得到exosip.lib。