Когда я пытаюсь найти библиотеку Qt, я использую команду find_package () .Но здесь есть проблема.Эта команда импортирует две версии одной и той же библиотеки.Под версией я имею в виду debug и realease .Например:
libQt5Core_debug.5.dylib
libQt5Core.5.11.0.dylib
Из-за этого нежелательного поведенияЯ получаю ошибку связывания во время выполнения.
objc[15947]: Class QMacAutoReleasePoolTracker is implemented in both /usr/local/Qt-5.11.0/lib/libQt5Core_debug.5.dylib (0x104326d40) and /usr/local/Qt-5.11.0/lib/libQt5Core.5.11.0.dylib (0x1075c41c8). One of the two will be used. Which one is undefined.
objc[15947]: Class QT_ROOT_LEVEL_POOL__THESE_OBJECTS_WILL_BE_RELEASED_WHEN_QAPP_GOES_OUT_OF_SCOPE is implemented in both /usr/local/Qt-5.11.0/lib/libQt5Core_debug.5.dylib (0x104326db8) and /usr/local/Qt-5.11.0/lib/libQt5Core.5.11.0.dylib (0x1075c4240). One of the two will be used. Which one is undefined.
objc[15947]: Class RunLoopModeTracker is implemented in both /usr/local/Qt-5.11.0/lib/libQt5Core_debug.5.dylib (0x104326de0) and /usr/local/Qt-5.11.0/lib/libQt5Core.5.11.0.dylib (0x1075c4268). One of the two will be used. Which one is undefined.
QObject::moveToThread: Current thread (0x7fcee5f02c20) is not the object's thread (0x7fcee5c04c10).
Cannot move to target thread (0x7fcee5f02c20)
You might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check that only one set of binaries are being loaded.
Мой CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Server)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_BUILD_TYPE "Debug")
set (CMAKE_CXX_FLAGS " -lprotobuf")
add_definitions(-DDEBUG_MODE)
set(CMAKE_AUTOMOC ON)
include_directories(/usr/local/boost_1_67_0/)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Core REQUIRED)
find_package(Qt5Sql REQUIRED)
find_package(Qt5Network REQUIRED)
set(SRCS Server.cpp Request_Response.pb.cc)
add_executable(Server main.cpp ${SRCS})
target_link_libraries(Server Qt5::Core Qt5::Widgets Qt5::Sql Qt5::Network)
Вопрос : Как я могу сказать cmake не связывать мою цель с более чемодна версия той же библиотеки?
ОС: macOS High Sierra 10.13.4
cmake: 3.11.0
РЕДАКТИРОВАТЬ: Кто-то сказал, что это дубликат этой проблемы и, конечно, этокасается установки отладки и выпуска с помощью find_package (), но это не одно и то же.В его случае версии отладки и выпуска библиотеки были распределены по разным путям.
В моем случае эти две версии одной и той же библиотеки находятся в одной папке. / usr / local / Qt-5.11.0 / lib
Посмотрите на это:
$:lib artur$ ls | grep -i qt5core
libQt5Core.5.11.0.dylib
libQt5Core.5.11.dylib
libQt5Core.5.dylib
libQt5Core.dylib
libQt5Core.la
libQt5Core.prl
libQt5Core_debug.5.11.0.dylib
libQt5Core_debug.5.11.dylib
libQt5Core_debug.5.dylib
libQt5Core_debug.dylib
libQt5Core_debug.la
libQt5Core_debug.prl
Примечание: все работает нормально, если я изменяю тип сборки.
от set(CMAKE_BUILD_TYPE "Debug")
до
set(CMAKE_BUILD_TYPE "Release")