1. 程式人生 > >windows到linux——移植新浪微博開放平臺客戶端(c++)到linux

windows到linux——移植新浪微博開放平臺客戶端(c++)到linux

    看微博這麼火,也試試這新浪微博開放平臺,發現給了C++版客戶端,還給了測試例子,可是沒有區分出Linux平臺和Mac平臺,就這麼嘗試下把這個客戶端程式移植到linux下執行看看。不過也不是完全盲目,還是看到人家給的SDK資源下有著Linux目錄和Mac目錄,說明應該再編寫的時候也考慮到了平臺的遷移。再看看程式碼很多地方對Win32、Wince有區分,但也沒有那麼完全(後來編譯的時候發現的。)

    目前的情況是測試例子是能跑了,所需的庫也有了,但是最初沒有仔細看下程式碼,導致執行還是有很多問題,先貼個圖:


是在Debian下執行的,以後有需要了再慢慢改吧!這裡就是記錄下常見的Windows到Linux移植時自己碰到的問題,以及自己認為的應該有的一些步驟(主要以c++語言來說),純屬個人經驗,還是那句老話,新人作為參考,行家還望多指教。

    (1)分析庫
     拿到一個Windows平臺的程式,首先對這個程式的檔案目錄結構有個大致的瞭解,功能作用的不多說,看看該應用程式的依賴庫,不管靜態的動態的,是自己可以動手編譯的,還是都已經給好了,如果是前者那麼你後續的工作則可以進行,否則可能只能放棄了。可以看到新浪微博的這個客戶端還是給出了部分庫的依賴關係,而且也部分進行了說明,能夠發現都是基於開源軟體來做的,包括xml解析,ssl、libcurl等,其實看到這,再看到原始碼裡的巨集,至於為什麼沒有給Linux平臺的版本還是難以理解的,難道是人員和時間的問題???好了,現在就可以分析下各個庫之間的相互依賴問題了。微博SDK中的README這樣寫到“一共分為兩個工程組
Weibo.common

Weibo.sdk

Weibo.common
libhttp - 實現基本的HTTP請求封裝,依賴庫:libcurl-7.21.1.
libjson - 修正了中文的JSON解析問題,可以用該庫來解析WEIBO SDK返回的JSON格式
Weibo.SDK
Weibo 實現了微博開放平臺基本的業務操作,具體操作流程請參考test工程,依賴庫:libhttp
test 微博操作例程。依賴庫:libWeibo”
好,那我們就從Weibo.common工程開始,先編譯出libhttp,再編譯Weibo庫,最後是測試程式test。至於這裡面還有的庫依賴關係,大家可以自己分析下。
    (2)分析程式碼
    我一開始看到原始碼裡大量的巨集定義來區分不同的平臺,以為只要按照依賴庫熟悉一個個編譯就OK了,結果還是有很多地方需要自己修改來適應,而且即使出來了,似乎還是有些,問題,因此只好反過來再看看原始碼了,所以應該再編譯之前就先分析下,看看原始碼有沒有針對性的,比如要是直接MFC程式,那就悲催了。在剛編譯新浪微部落格戶端時看到了BOOL以及LPCTSTR等型別,以為完了,還好只是用部分型別定義。然後就是在編譯的過程中可以將一些針對Windows平臺的型別進行轉換,這裡提幾個很常見的,算是自己的記錄了,以後方便檢視,僅供參考,測試不對請留言告知,萬分感謝:
a.對於__int64型別,typedef long long int  __int64
b._atoi64()函式,可以使用aoll()
c.windows 下的GetTickCount   函式功能:GetTickCount返回(retrieve)從作業系統啟動到現在所經過(elapsed)的毫秒數,它的返回值是DWORD。linux下 <time.h> clock_gettime   CLOCK_MONOTONIC:從系統啟動這一刻起開始計時,不受系統時間被使用者改變的影響
d.?:三目條件運算子,在vs環境下發現允許是void型別,而gcc則直接認為錯誤,需要注意
e.error: expected template-name before ‘<’ token,萬一冒這麼個錯誤,可能是c++的模板問題,gcc對模板編譯進行嚴格檢查的,最後補全類作用域::。
    好了,先這麼多吧,自己的還沒有完全測試成功呢,只是小記錄下,以後要是完全可以了,再把詳細的補全。