vs2010 編譯mosquitto win32版本,開啓websockets,實現消息推送

原文出處:http://blog.csdn.net/ydpzg/article/details/45772223

編譯的電腦:MacBook Pro 虛擬機win7,64bit,1.5G的內存 
參考:http://blog.csdn.net/Netown_Ethereal/article/details/41981103

廢話少說,開始~

1. 下載vs2010

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

2. 下需要的庫。

c-ares http://c-ares.haxx.se/ 我下的是當時最新的1.10.0,c-ares-1.10.0.tar.gz 
pthreads ftp://sourceware.org/pub/pthreads-win32 2.9.1,pthreads-w32-2-9-1-release.zip 
openssl http://www.openssl.org/related/binaries.html 我下的是當時最新的1.0.2a,Win32OpenSSL-1_0_2a.exe 
cmake http://www.cmake.org/download/ 我下的是當時最新的3.2.2,cmake-3.2.2-win32-x86.exe 
libwebsocket http://git.warmcat.com/cgi-bin/cgit/libwebsockets/ 1.4,libwebsockets-1.4-chrome43-firefox-36.tar.gz 
mosquitto http://mosquitto.org/download/ 我下的是當時最新的1.4.2,mosquitto-1.4.2.tar.gz

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,敬請關注。

補充資源鏈接:點我跳轉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章