1. 程式人生 > >vs2010 編譯mosquitto win32版本,開啟websockets,實現訊息推送

vs2010 編譯mosquitto win32版本,開啟websockets,實現訊息推送

前言:因為之前沒有怎麼碰vs,只搞過cygwin,而cygwin上搞了好久都搞不定,以至於重新整理思路,這window上的版本應該怎麼去編譯。一直不知道怎麼搞,只能邊看其他教程,邊自己搞著,連續幾天下了班就可以研究編譯,特別是在開啟websockets的時候,加上libwebsockets庫,對於小白來說,特別痛苦。也罷,最後也成功編譯。

廢話少說,開始~

1. 下載vs2010

我下了個旗艦版的,不過只有30天試用期,無妨,編譯就夠了。
http://www.xpgod.com/soft/6637.html
ps:之前用過vs2008去編譯,然後各種莫名其妙,如果有同學知道為什麼的,請留言。

2. 下需要的庫。

3. 安裝庫。

安裝檔案,原始碼檔案都放在C:\application\
1)先安裝vs2010,我是完全安裝,為了減少其他因素的影響。
2)解壓c-ares,路徑為C:\application\c-ares-1.10.0
3)解壓pthreads,然後把Pre-built.2裡include的檔案複製到C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
Pre-built.2裡lib的檔案複製到C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
4)安裝openssl,路徑為C:\OpenSSL-Win32
5)安裝cmake,在開始選單生成了cmake-gui.exe程式。
6)解壓libwebsocket,這是原始碼來的,需要vs2010編譯一下。
開啟cmake-gui,如下

這裡寫圖片描述

在第三步的時候,彈出個對話方塊,選擇Visual Studio 10 2010即可,不要選擇64bit,切記。
等一會兒,如下

這裡寫圖片描述

在C:\build-websocket就生成了vs的工程,找到libwebsockets.sln,雙擊開啟。

這裡寫圖片描述

這裡寫圖片描述

生成了比較重要的東西,後面要用到:
C:\build-websocket\bin\MinSizeRel libeay32.dll ssleay32.dll websockets.dll
C:\build-websocket\lib\MinSizeRel websockets.lib ZLIB.lib

7)解壓mosquitto,路徑為C:\application\mosquitto-1.4.2

4. 準備編譯mosquitto1.4.2

開啟cmake-gui,依次點1,2,3步,最後出現c-ares找不到

這裡寫圖片描述

然後配置相關選項,如下

這裡寫圖片描述

在這裡C:\build,用vs2010開啟mosquitto.sln,在“輸出”視窗發現好多錯誤

這裡寫圖片描述

原來是這些檔案裡面日期字串的星期幾導致的。於是把上面提到的檔案裡的亂碼刪掉,即把“周幾”刪掉,如:

這裡寫圖片描述

mosquittopp.vcxproj檔案中 報錯,名稱不能以“>”字元(十六進位制值 0x3E)開頭。後面還有幾處類似改法。

這裡寫圖片描述

重新開啟mosquitto.sln,專案右鍵開始生成。

報一推錯誤,大意是libwebsockcets的函式找不到。

這裡寫圖片描述

在解決方案資源管理器中找到mosquitto,右鍵,屬性。

這裡寫圖片描述

在開啟的mosquitto屬性頁裡,依次開啟配置屬性,連結器,輸入,附加依賴性。

這裡寫圖片描述

點選右邊的小三角,出來附加依賴項頁面。把最後的websockets.lib改成正確的lib檔案路徑。

這裡寫圖片描述

再專案右鍵重新編譯一下。

這裡寫圖片描述

如果遇到無法開啟mosquitto.lib,表明某個子工程需要依賴libmosquitto這個工程,在子工程右鍵“專案依賴項”裡面勾上libmosquitto就可以了。

如果遇到一堆紅色的錯誤,無法解析外部符號,就表明某些庫沒有引用,就要在附加依賴性新增對應的lib。或者複製到
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib

如果遇到缺少某個.h標頭檔案的,需要把對應的標頭檔案複製到C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include

此時主程式在:
C:\build\src\MinSizeRel\mosquitto.exe
C:\build\src\MinSizeRel\mosquitto_passwd.exe

C:\build\client\MinSizeRel\mosquitto_pub.exe
C:\build\client\MinSizeRel\mosquitto_sub.exe

當然,這裡選擇Release也是可以的。

這裡寫圖片描述

如果想把生成的東西放在一起,就要填輸出路徑了。子工程右鍵屬性,配置屬性,常規,輸出目錄,改維c:\build\output\,其他子工程也一樣修改。

這裡寫圖片描述

改好後,重新生成。

此時,還是打不開主程式的,提示缺少websockets.lib,
於是複製C:\build-websocket\lib\MinSizeRel\websockets.lib -> c:\build\output
再把需要的w檔案搬過來,如下
C:\application\mosquitto-1.4.2\mosquitto.conf -> c:\build\output
C:\build-websocket\bin\MinSizeRel\libeay32.dll -> c:\build\output
C:\build-websocket\bin\MinSizeRel\ssleay32.dll -> c:\build\output
C:\pthreads\Pre-built.2\dll\x86\pthreadVC2.dll -> c:\build\output
現在的目錄如下:開啟看看,可以執行。

這裡寫圖片描述

先把mosquitto.conf裡的Extra listeners開啟一下:listener 9001,protocol websockets
測試一下mqtt和websockets方式,同時開啟的方式:

這裡寫圖片描述

如出現錯誤0x0000007d, 裝vcredist2010_x86.exe即可解決。

ps:在完成編譯之前遇到好多問題,vs2010報好多錯誤,解決不了,特別是最後編譯通過開啟exe就報應用程式不能正常啟動 (0xc000007b)。特別吐血,在絕望之際,查到64位編譯使用32位庫,或者32位編譯使用64位庫就回出現這種情況,於是我把原來cmake生成vs工程的配置由vs2010 x64,改成vs2010 x86,即後來vs2010主介面中間顯示WIN32,而不是x64,坑了好久,反正以後記住了,無論系統是不是64位的,一律使用32位庫和32位編譯。

到此,編譯完成,我會把編譯過程上傳到csdn,敬請關注。

補充資源連結:點我跳轉