windows下编译MQTT问题集锦

vs2017顺利的编译

依然残存的问题:

1. 编译 Sha1TestOpenSSL 项目时,遇到的问题:

2>------ 已启动全部重新生成: 项目: Sha1TestOpenSSL, 配置: Debug x64 ------
2>Building Custom Rule D:/project3/MQTT/paho.mqtt.c-master/src/CMakeLists.txt
2>SHA1.c
2>MSVCRT.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 main,该符号在函数
 "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ) 中被引用
2>C:\mqtt\paho_mqtt_c_vs2017_64\src\Debug\Sha1TestOpenSSL.exe : fatal error LNK1120: 
1 个无法解析的外部命令
2>已完成生成项目“Sha1TestOpenSSL.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 1 个,失败 1 个,跳过 0 个 ==========

解答:有博客说,是因为VS2017新建控制台项目时,没有WIN32控制台项目,所以是WINDOWS项目。需要修改属性里面的一个设置:删除_WINDOWS, 添加    _CONSOLE。 但是这样操作之后,并没有变化。。。

2. 编译C库和CPP库的时候,两个 INSTALL工程 均报错如下,具体发现是 C库中 RUN_TESTS 这个项目导致的。

1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: 命令“setlocal
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: D:\project3\tools\cmake-3.16.4-win64-x64\bin\cmake.exe -DBUILD_TYPE=Debug -P cmake_install.cmake
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :cmEnd
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :cmErrorLevel
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: exit /b %1
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :cmDone
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: if %errorlevel% neq 0 goto :VCEnd
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(138,5): error MSB3073: :VCEnd”已退出,代码为 1。
1>已完成生成项目“INSTALL.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 38 个,跳过 0 个 ==========

解答:经查找,有人说是:路径有空格的问题,路径需要用双引号包裹。 然并卵。

正解:解决方案:以管理员身份运行VS2017,然后从VS2017打开改项目,编译INSTALL即可通过。

原理如下:https://blog.csdn.net/tingzhushaohua/article/details/81559259

3.  编译CPP库的时候,无法打开输入文件“..\Release\paho-mqtt3cs.lib” 等的错误。因为CMake的时候,添加了OPENSSL路径之后,没有再次点击一下configure。

各种未声明,缺少分号的错误

LINK : fatal error LNK1181: 无法打开输入文件“..\Release\paho-mqtt3cs.lib”

LINK : fatal error LNK1181: 无法打开输入文件“..\src\Release\paho-mqtt3cs.lib”

LINK : fatal error LNK1181: 无法打开输入文件“..\Release\paho-mqtt3cs.lib”

LINK : fatal error LNK1181: 无法打开输入文件“..\Release\paho-mqtt3a.lib”

 解决: 重新去CMake一下,添加好路径之后,记得Configure一下。

4. 关于解压文件的时候,很多博客都说,需要把C库,解压到CPP库里面,好像也不是必须的,只要在CMake CPP库的时候,配置好C库的路径即可,如下,就可以正常编译了。否则会出现下面的错误,找不到头文件。配置好c库源文件和lib 文件即可。

后来多次实践证明,C库还是放在CPP库里面,是最佳的编译方式。

2>d:\project3\mqtt\paho.mqtt.cpp-master\src\mqtt/message.h(28): fatal error C1083: 
无法打开包括文件: “MQTTAsync.h”: No such file or directory
2>properties.cpp
2>d:\project3\mqtt\paho.mqtt.cpp-master\src\mqtt/properties.h(28): fatal error C1083: 
无法打开包括文件: “MQTTProperties.h”: No such file or directory
2>response_options.cpp
2>d:\project3\mqtt\paho.mqtt.cpp-master\src\mqtt/response_options.h(10): fatal error C1083: 
无法打开包括文件: “MQTTAsync.h”: No such file or directory
2>ssl_options.cpp
2>d:\project3\mqtt\paho.mqtt.cpp-master\src\mqtt/ssl_options.h(30): fatal error C1083: 
无法打开包括文件: “MQTTAsync.h”: No such file or directory
2>string_collection.cpp
2>subscribe_options.cpp
2>d:\project3\mqtt\paho.mqtt.cpp-master\src\mqtt/subscribe_options.h(27): fatal error 
C1083: 无法打开包括文件: “MQTTAsync.h”: No such file or directory
2>token.cpp

5.  关于X64与86个冲突问题。目标机型与编译环境,位数导致的冲突。

解决方法:

当编译32位C库和CPP库的时候,用CMake的32位编译器。

当编译64位C库和CPP库的时候,用CMake的64位编译器。

发布了417 篇原创文章 · 获赞 156 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_34732729/article/details/104388270