原文出處: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,敬請關注。
補充資源鏈接:點我跳轉