Отсутствуют файлы.obj при связывании paho.mqtt.cpp на цели отладки Windows x64
Я попробовал два разных способа связать библиотеку paho.mqtt.cpp ( https://github.com/eclipse/paho.mqtt.cpp) с целью моего проекта отладки Windows x64.
Первый способ был таким, как описано в https://github.com/eclipse/paho.mqtt.cpp:
Сначала я скачал проект paho.mqtt.c ( https://github.com/eclipse/paho.mqtt.c) и собрал его с помощью MSVisualCommandPrompt Native x64:
> cd paho.mqtt.c
> cmake -G "Visual Studio 15 Win64" -Bbuild -H. -DCMAKE_INSTALL_PREFIX=C:\mqtt\paho-c
> cmake --build build/ --target install
Теперь я смог построить проект paho.mqtt.cpp следующим образом:
> cd ..\paho.mqtt.cpp
> cmake -G "Visual Studio 15 Win64" -Bbuild -H. -DCMAKE_INSTALL_PREFIX=C:\mqtt\paho-cpp -DPAHO_BUILD_SAMPLES=ON -DPAHO_WITH_SSL=OFF -DCMAKE_PREFIX_PATH=C:\mqtt\paho-c
> cmake --build build/ --target install
Построение этого пути приводит к созданию paho-mqtt3a.lib (paho.mqtt.c) и paho-mqttpp3-static.lib (paho.mqtt.cpp), которые я попытался связать с помощью следующего скрипта cmake:
cmake_minimum_required(VERSION 3.10)
project(paho-test)
add_executable(${PROJECT_NAME} main.cpp)
target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/extern/paho-c/include>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/extern/paho-cpp/include>
)
target_link_libraries(${PROJECT_NAME}
${CMAKE_SOURCE_DIR}/extern/paho-c/lib/paho-mqtt3a.lib
${CMAKE_SOURCE_DIR}/extern/paho-cpp/lib/paho-mqttpp3-static.lib
)
Построение приводит к следующим ошибкам компоновщика:
Severity Code Description Project File Line Suppression State
Error LNK1120 1 unresolved externals C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\simulator.exe 1
Warning LNK4099 PDB 'paho-cpp-objs.pdb' was not found with 'paho-mqttpp3-static.lib(connect_options.obj)' or at 'C:\Users\optional\CMakeBuilds\3258d24a-75bf-e336-8921-c9caaf833551\build\x64-Debug (default)\paho-cpp-objs.pdb'; linking object as if no debug info C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\paho-mqttpp3-static.lib(connect_options.obj) 1
Warning LNK4099 PDB 'paho-cpp-objs.pdb' was not found with 'paho-mqttpp3-static.lib(token.obj)' or at 'C:\Users\optional\CMakeBuilds\3258d24a-75bf-e336-8921-c9caaf833551\build\x64-Debug (default)\paho-cpp-objs.pdb'; linking object as if no debug info C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\paho-mqttpp3-static.lib(token.obj) 1
Warning LNK4099 PDB 'paho-cpp-objs.pdb' was not found with 'paho-mqttpp3-static.lib(will_options.obj)' or at 'C:\Users\optional\CMakeBuilds\3258d24a-75bf-e336-8921-c9caaf833551\build\x64-Debug (default)\paho-cpp-objs.pdb'; linking object as if no debug info C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\paho-mqttpp3-static.lib(will_options.obj) 1
Warning LNK4099 PDB 'paho-cpp-objs.pdb' was not found with 'paho-mqttpp3-static.lib(ssl_options.obj)' or at 'C:\Users\optional\CMakeBuilds\3258d24a-75bf-e336-8921-c9caaf833551\build\x64-Debug (default)\paho-cpp-objs.pdb'; linking object as if no debug info C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\paho-mqttpp3-static.lib(ssl_options.obj) 1
Error LNK2019 unresolved external symbol Log referenced in function "private: void __cdecl mqtt::token::on_success(struct MQTTAsync_successData *)" (?on_success@token@mqtt@@AEAAXPEAUMQTTAsync_successData@@@Z) C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\paho-mqttpp3-static.lib(token.obj) 1
Я понятия не имею, куда идти дальше. Итак, второй способ, которым я пытался связать библиотеку, это использовать способ, описанный здесь ( https://github.com/eclipse/paho.mqtt.cpp/issues/172):
libs/
paho.mqtt.cpp/ <- paho.mqtt.cpp as git submodule
paho.mqtt.c/ <- precompiled C lib
CMakeList.txt <- see below
main.cpp
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(paho-test)
include_directories(libs/paho.mqtt.cpp/src libs/paho.mqtt.cpp/paho.mqtt.c/include)
add_subdirectory (libs/paho.mqtt.cpp)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} paho-mqttpp3)
в результате библиотека не находит предварительно скомпилированные библиотеки paho.mqtt.c, хотя проблема была решена на github:
Severity Code Description Project File Line Suppression State
Error CMake Error at C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.12/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find PahoMqttC (missing: PAHO_MQTT_C_LIBRARIES
PAHO_MQTT_C_INCLUDE_DIRS) C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.12/Modules/FindPackageHandleStandardArgs.cmake 137
Даже при явном указании cmake на соответствующие PAHO_MQTT_C_LIBRARIES и PAHO_MQTT_C_INCLUDE_DIRS сборка не завершается успешно:
Severity Code Description Project File Line Suppression State
Error LNK1104 cannot open file 'paho-mqttpp3.lib' C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CMakeLists.txt C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\LINK 1