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

前言:因为之前没有怎么碰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,敬请关注。

补充资源链接:点我跳转

时间: 2024-10-21 10:17:09

vs2010 编译mosquitto win32版本,开启websockets,实现消息推送的相关文章

关于消息推送的补充,主要介绍服务端的实现,包含object c 版本 c 版本 java 版本 php 版本 (转)

要实现消息推送功能,我们可以采用第三方(腾讯:信鸽:百度:云推送:极光推送:友盟):当然,因为各种原因,我们不能使用第三方的推送服务,那我们就需要自己编写服务端.在网上寻觅了很久,找到一篇很不错的讲解消息推送的文章,包含(object c 版本 c 版本 java 版本 php 版本)的后端实现,分享之. 原文地址:http://tanqisen.github.io/blog/2013/02/27/ios-push-apns/ 一步一步实现iOS应用PUSH功能 FEB 27TH, 2013 1

Mosquitto搭建Android推送服务(二)Mosquitto简介及搭建

文章钢要: 1.了解Mosquitto服务器 2.在Liunx中搭建Mosquitto服务器 3.设置Mosquitto集群 一.Mosquitto简介 一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机.嵌入式计算机.微型控制器等移动设备.一个典型的应用案例就是 Andy Stanford-ClarkMosquitto(MQTT协议创始人之一)在家中实现的远

VS2010编译Boost 1.57 静态链接库

0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/history/version_1_57_0.html,选择windows版 编译器:VS2010 编译目标:静态链接库 C/C++运行库链接方式: /MT  /MTd   /MD   /MDd 官网给出的windows平台编译器测试包括 Windows: GCC, mingw: 4.4.0, 4.4.7. 4.5.4, 4.6.3, 4.7.2, 4.7.3, 4.8.0, 4.8.2,

Mosquitto安装_Ubuntu/Debian上安装消息队列Mosquitto

Mosquitto安装_Ubuntu/Debian上安装消息队列Mosquitto MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制.Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用.若初次接触MQTT协议,可先理解以下概念:[MQTT协议特点]——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好

MQTT与Mosquitto服务器搭建以及Android推送(一)MQTT简介

文章钢要: 对MQTT协议有一定认识 对MQTT运行原理有一定了解 一.什么是MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议. 国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议.其中Sohu,Cmstop手机客户端中均有使用到MQTT作为消息推送消息. MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息

完美编译暗黑世界1.4的win32版本(支持线程和联网模块)

完美编译暗黑世界1.4的win32版本(支持线程和联网模块) (原文地址/下载地址:http://www.9miao.com/question-15-53447.html) 首先,非常感谢9秒团队无私奉献的精神,把暗黑世界客户端源代码免费公开! 让我们有了学习cocos2Dx的入门工程,造福广大会员,功德无量! 本次修改,我是在1.3基础上的,其实也是在1.0基础上一步一步修改过来的. 初学者可以先看1.0的工程,再看1.3的工程,接着就是看1.4的工程了. 一些文件配置和拷贝,请参考1.0和1

VS2010编译Lua程序(lua-5.2.3)

编译静态链接库 1.下载Lua源码 下载后解压到一个目录下,这里假设解压到D:\win32Lua 注意下载的版本,如果是5.2.x,后面代码中的C API发生了改变 2)在VS2010中新建一个静态库项目,项目命名为lua        a 选择新建 Win32 console project b 在wizard界面选择 static Library:不选择Precomplied Header 3)往工程中添加代码 a 复制D:\win32Lua\lua-5.2.3\src 目录下的*.h文件到

win7下vs2010编译使用静态和动态库

知识补充: sqlite3.dll动态链接库,它允许程序共享执行特殊任务所必需的代码和其他资源. 动态的sqlite3.lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明.编译后只是将导出声明部分编译到宿主程序中,其生成的sqlite3.exe在运行时需要相应的dll文件支持 . 静态的sqlite3.lib将导出声明和实现都放在lib中.编译后所有代码都嵌入到宿主程序,其生成的sqlite3.exe可直接运行. 任务: 一.使用VS2010编译sqlite3,生成动态的sql

在VS2012下不安装VS2010编译VS2010的工程

虽然一路追随这VISUAL SUTDIO在编程,但是断档的情况还是有的,最近一次硬盘问题使得安装了所有的VS2003-VS2012的机器硬盘挂了,无奈只能够安装了,不过觉得没啥用了,就安装一个VS2012不就OK了嘛,不过因为VS2012对VS2010完美支持vcxproj,使得完全可能在VS2012中编译VS2010的工程,但是必须安装IDE,这太麻烦了,有人也提出了不安装VS2010进行工程编译的想法,不过最后也没有得出结论. 之前也有过研究,发现MSBUILD进行编译的需要一套“规则”,都