欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编译mqtt_client及遇到的问题

程序员文章站 2022-07-14 20:31:13
...

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

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

编译mqtt_client及遇到的问题  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: 无法解析的外部符号 aaa@qq.com,该符号在函数 _WebSocket_close 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2001: 无法解析的外部符号 aaa@qq.com
1>paho-mqtt3a.lib(WebSocket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _WebSocket_receiveFrame 中被引用
1>paho-mqtt3a.lib(MQTTAsync.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _MQTTAsync_connecting 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_close 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_close_only 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_new 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_setnonblocking 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_getpeer 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_getch 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_getReadySocket 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_close_only 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_new 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_outInitialize 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_outTerminate 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_error 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_writev 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_getaddrname 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _Socket_new 中被引用
1>paho-mqtt3a.lib(Socket.obj) : error LNK2019: 无法解析的外部符号 aaa@qq.com,该符号在函数 _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)。

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

编译mqtt_client及遇到的问题

编译mqtt_client及遇到的问题

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

相关标签: 音视频开发