«

vs2010 编译mosquitto win32版本,开启websockets,实现消息推送

时间:2024-3-2 17:51     作者:韩俊     分类: Android


前言:因为之前没有怎么碰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去编译,然后各种莫名其妙,如果有同学知道为什么的,请留言。

  1. 下需要的库。

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

  1. 安装库。

安装文件,源码文件都放在C:application
1)先安装vs2010,我是完全安装,为了减少其他因素的影响。
2)解压c-ares,路径为C:applicationc-ares-1.10.0
3)解压pthreads,然后把Pre-built.2里include的文件复制到C:Program Files (x86)Microsoft Visual Studio 10.0VCinclude
Pre-built.2里lib的文件复制到C:Program Files (x86)Microsoft Visual Studio 10.0VClib
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-websocketbinMinSizeRel libeay32.dll ssleay32.dll websockets.dll
C:build-websocketlibMinSizeRel websockets.lib ZLIB.lib

7)解压mosquitto,路径为C:applicationmosquitto-1.4.2

  1. 准备编译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.0VClib

如果遇到缺少某个.h头文件的,需要把对应的头文件复制到C:Program Files (x86)Microsoft Visual Studio 10.0VCinclude

此时主程序在:
C:buildsrcMinSizeRelmosquitto.exe
C:buildsrcMinSizeRelmosquitto_passwd.exe

C:buildclientMinSizeRelmosquitto_pub.exe
C:buildclientMinSizeRelmosquitto_sub.exe

当然,这里选择Release也是可以的。

如果想把生成的东西放在一起,就要填输出路径了。子工程右键属性,配置属性,常规,输出目录,改维c:buildoutput,其他子工程也一样修改。

改好后,重新生成。

此时,还是打不开主程序的,提示缺少websockets.lib,
于是复制C:build-websocketlibMinSizeRelwebsockets.lib -> c:buildoutput
再把需要的w文件搬过来,如下
C:applicationmosquitto-1.4.2mosquitto.conf -> c:buildoutput
C:build-websocketbinMinSizeRellibeay32.dll -> c:buildoutput
C:build-websocketbinMinSizeRelssleay32.dll -> c:buildoutput
C:pthreadsPre-built.2dllx86pthreadVC2.dll -> c:buildoutput
现在的目录如下:打开看看,可以运行。

先把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,敬请关注。

补充资源链接:点我跳转

标签: android

热门推荐