前言:因为之前没有怎么碰vs,只搞过cygwin,而cygwin上搞了好久都搞不定,以至于重新整理思路,这window上的版本应该怎么去编译。一直不知道怎么搞,只能边看其他教程,边自己搞着,连续几天下了班就可以研究编译,特别是在开启websockets的时候,加上libwebsockets库,对于小白来说,特别痛苦。也罢,最后也成功编译。
编译的电脑: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,敬请关注。
补充资源链接:点我跳转