编译mqtt_client及遇到的问题

编译好mqtt_c 和 mqtt_cpp 的库之后,进行一下测试。

用VS2015编译的32位debug和release,并将c库和cpp库,所以用VS2015建一个win32控制台工程,空项目。

  debug和release各自配置各自的lib路径。include和mqtt 都包含进去都是.h文件。

#include<iostream>

#include<string>
using namespace std;
#include "mqtt\async_client.h"


int main(int argc, char* argv[])
{
	const std::string TOPIC{ "hello" };

	const std::string CLIENT_ID{ "user" };

	const std::string ADDRESS{ "127.0.0.1:1883" };    //这里写服务器的IP

	const int QOS = 1;

	const char * PAYLOAD = { "Hello World!" };

	// Create a client

	mqtt::async_client cli(ADDRESS, CLIENT_ID);

	mqtt::connect_options connOpts;

	connOpts.set_keep_alive_interval(20);

	connOpts.set_clean_session(true);

	try {
		std::cout << "Connecting to the MQTT server..." << std::flush;

		cli.connect(connOpts)->wait();		// 等待,连接超时

		cli.start_consuming();

		// Now try with itemized publish.

		cli.publish(TOPIC, PAYLOAD, strlen(PAYLOAD), QOS, false);

		// Disconnect

		std::cout << "OK" << std::endl;

		std::cout << "\nShutting down and disconnecting from the MQTT server..." << std::flush;

		cli.unsubscribe(TOPIC)->wait();

		cli.stop_consuming();

		cli.disconnect()->wait();

		std::cout << "OK" << std::endl;

	}

	catch (const mqtt::exception& exc) {

		std::cerr << exc.what() << std::endl;
		system("pause");	// 退出
		return 1;

	}

	std::cin.get();
	system("pause");

	return 0;
}

问题1:产生这个问题的原因是当前工程是Debug版本,而引用的库文件时Release版本,只需要把当前的Debug模式改成Release模式就可以解决这个问题。打开解决方案--》属性--》链接器--》输入--》附加依赖项中引用debug版本的lib文件名称。添加其附加库目录。

1>  client.cpp
1>paho-mqttpp3-static.lib(connect_options.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(connect_options.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(async_client.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(async_client.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(disconnect_options.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(disconnect_options.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(token.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(token.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(will_options.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(will_options.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(ssl_options.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(ssl_options.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(string_collection.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(string_collection.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(message.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(message.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(iclient_persistence.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(iclient_persistence.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>paho-mqttpp3-static.lib(response_options.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(client.obj 中)
1>paho-mqttpp3-static.lib(response_options.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(client.obj 中)
1>    正在创建库 D:\project3\project\mqtt_client\Release\mqtt_client.lib 和对象 D:\project3\project\mqtt_client\Release\mqtt_client.exp
1>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>paho-mqttpp3-static.lib(response_options.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(ssl_options.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(string_collection.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(iclient_persistence.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(connect_options.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(async_client.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(token.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(will_options.obj) : error LNK2001: 无法解析的外部符号 __imp___invalid_parameter
1>paho-mqttpp3-static.lib(response_options.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(ssl_options.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(string_collection.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(iclient_persistence.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(connect_options.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(async_client.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(token.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>paho-mqttpp3-static.lib(will_options.obj) : error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW
1>D:\project3\project\mqtt_client\Release\mqtt_client.exe : fatal error LNK1120: 2 个无法解析的外部命令
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========

问题2: 没有添加 ws2_32.lib 。在属性->配置属性->链接器->输入,添加上:ws2_32.lib 即可。

1>  client.cpp
1>    正在创建库 D:\project3\project\mqtt_client\Debug\mqtt_client.lib 和对象 D:\project3\project\mqtt_client\Debug\mqtt_client.exp
1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>paho-mqtt3a.lib(WebSocket.obj) : error LNK2019: 无法解析的外部符号 __imp__htons@4,该符号在函数 _WebSocket_close 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2001: 无法解析的外部符号 __imp__htons@4
1>paho-mqtt3a.lib(WebSocket.obj) : error LNK2019: 无法解析的外部符号 __imp__ntohs@4,该符号在函数 _WebSocket_receiveFrame 中被引用
1>paho-mqtt3a.lib(MQTTAsync.obj) : error LNK2019: 无法解析的外部符号 __imp__getsockopt@20,该符号在函数 _MQTTAsync_connecting 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 ___WSAFDIsSet@8,该符号在函数 _Socket_close 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 _Socket_close_only 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__connect@12,该符号在函数 _Socket_new 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__ioctlsocket@12,该符号在函数 _Socket_setnonblocking 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__getpeername@12,该符号在函数 _Socket_getpeer 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__recv@16,该符号在函数 _Socket_getch 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__select@20,该符号在函数 _Socket_getReadySocket 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__shutdown@8,该符号在函数 _Socket_close_only 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__socket@12,该符号在函数 _Socket_new 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 _Socket_outInitialize 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _Socket_outTerminate 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__WSAGetLastError@0,该符号在函数 _Socket_error 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__WSASend@28,该符号在函数 _Socket_writev 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__WSAAddressToStringW@20,该符号在函数 _Socket_getaddrname 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__getaddrinfo@16,该符号在函数 _Socket_new 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 __imp__freeaddrinfo@4,该符号在函数 _Socket_new 中被引用
1>D:\project3\project\mqtt_client\Debug\mqtt_client.exe : fatal error LNK1120: 19 个无法解析的外部命令
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========

问题3:无法打开各种 PDB文件。

“mqtt_client.exe”(Win32): 已加载“D:\project3\project\mqtt_client\Debug\mqtt_client.exe”。已加载符号。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\ws2_32.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcryptprimitives.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\advapi32.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\crypt32.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\ucrtbase.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcp140d.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\msasn1.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\ucrtbased.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\vcruntime140d.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\vcruntime140d.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已卸载“C:\Windows\SysWOW64\vcruntime140d.dll”
“mqtt_client.exe”(Win32): 已加载“C:\Windows\SysWOW64\ucrtbased.dll”。无法查找或打开 PDB 文件。
“mqtt_client.exe”(Win32): 已卸载“C:\Windows\SysWOW64\ucrtbased.dll”
0x770F3DB2 处(位于 mqtt_client.exe 中)引发的异常: Microsoft C++ 异常: mqtt::exception,位于内存位置 0x007FEFB8 处。
0x00ADAC67 处(位于 mqtt_client.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000008 时发生访问冲突。

程序“[13552] mqtt_client.exe”已退出,返回值为 0 (0x0)。

 解决:菜单栏的 调试->选项->勾选下面两个位置。等编译过去之后,再把这两个√去掉。

release项目调试通,但是连不上。debug中间总是跳到一个文件,也不知道哪里出问题了。

参考链接:

https://www.cnblogs.com/lisuyun/p/6410393.html

https://www.cnblogs.com/lic02891/archive/2012/11/09/2763210.html

https://blog.csdn.net/win_turn/article/details/50468115

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值