歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Windows到Linux——移植新浪微博開放平台客戶端(C++)到Linux

Windows到Linux——移植新浪微博開放平台客戶端(C++)到Linux

日期:2017/3/1 11:16:04   编辑: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對模板編譯進行嚴格檢查的,最後補全類作用域::。

好了,先這麼多吧,自己的還沒有完全測試成功呢,只是小記錄下,以後要是完全可以了,再把詳細的補全。

Copyright © Linux教程網 All Rights Reserved