LINUX.ORG.RU

Линковка с кастомной внешней библиотекой в CMAKE

 


0

2

Всем привет. Пытаюсь собрать проект Qt на cmake но столкнулся с проблемой линковки с отдельно собранной своей либой. Проект с библиотекой не должен подключатся с данному проекту. Либа динамическая. Вот так выглядит мои наработки. Подскажите как правильно это сделать? Ниже кидаю сам cmake и ошибку линковки.

...
[ 67%] Building CXX object CMakeFiles/maintenance.dir/qrc_resources.cpp.o
[ 69%] Building CXX object CMakeFiles/maintenance.dir/maintenance_autogen/moc_compilation.cpp.o
[ 71%] Linking CXX executable maintenance
CMakeFiles/maintenance.dir/MainWindow.cpp.o: In function `MainWindow::MainWindow(QMainWindow*)':
/media/blinct/free1/QtProjects/Applications/095/maintenance/MainWindow.cpp:74: undefined reference to `TenzGraphTab::TenzGraphTab(QWidget*)'
CMakeFiles/maintenance.dir/maintenance_autogen/moc_compilation.cpp.o: In function `AngleSensors::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)':
/media/blinct/free1/QtProjects/Applications/095/maintenance/cmake-build-debug/maintenance_autogen/ECUKZBRF6L/moc_AngleSensors.cpp:92: undefined reference to `AngleSensors::OnSetNullPosition()'
/media/blinct/free1/QtProjects/Applications/095/maintenance/cmake-build-debug/maintenance_autogen/ECUKZBRF6L/moc_AngleSensors.cpp:93: undefined reference to `AngleSensors::OnResetAccel()'
/media/blinct/free1/QtProjects/Applications/095/maintenance/cmake-build-debug/maintenance_autogen/ECUKZBRF6L/moc_AngleSensors.cpp:94: undefined reference to `AngleSensors::OnDataReceived(QString, QMap<QString, QVariant>)'
/media/blinct/free1/QtProjects/Applications/095/maintenance/cmake-build-debug/maintenance_autogen/ECUKZBRF6L/moc_AngleSensors.cpp:95: undefined reference to `AngleSensors::OnHandleUp()'
/media/blinct/free1/QtProjects/Applications/095/maintenance/cmake-build-debug/maintenance_autogen/ECUKZBRF6L/moc_AngleSensors.cpp:96: undefined reference to `AngleSensors::OnHandleDown()'
/media/blinct/free1/QtProjects/Applications/095/maintenance/cmake-build-debug/maintenance_autogen/ECUKZBRF6L/moc_AngleSensors.cpp:97: undefined reference to `AngleSensors::OnHandleReleased()'
/media/blinct/free1/QtProjects/Applications/095/maintenance/cmake-build-debug/maintenance_autogen/ECUKZBRF6L/moc_AngleSensors.cpp:98: undefined reference to `AngleSensors::OnHandleTimer()'
CMakeFiles/maintenance.dir/maintenance_autogen/moc_compilation.cpp.o:(.data.rel.ro._ZTV17AngleSensorColumn[_ZTV17AngleSensorColumn]+0x28): undefined reference to `AngleSensorColumn::~AngleSensorColumn()'
CMakeFiles/maintenance.dir/maintenance_autogen/moc_compilation.cpp.o:(.data.rel.ro._ZTV17AngleSensorColumn[_ZTV17AngleSensorColumn]+0x30): undefined reference to `AngleSensorColumn::~AngleSensorColumn()'
CMakeFiles/maintenance.dir/maintenance_autogen/moc_compilation.cpp.o:(.data.rel.ro._ZTV17AngleSensorColumn[_ZTV17AngleSensorColumn]+0x1c0): undefined reference to `non-virtual thunk to AngleSensorColumn::~AngleSensorColumn()'
CMakeFiles/maintenance.dir/maintenance_autogen/moc_compilation.cpp.o:(.data.rel.ro._ZTV17AngleSensorColumn[_ZTV17AngleSensorColumn]+0x1c8): undefined reference to `non-virtual thunk to AngleSensorColumn::~AngleSensorColumn()'
../../../088/build-libs-ubuntu-Release/libNetworkCommunication.so: undefined reference to `BtlSerialPortImpl::setRequestToSend(bool)'
../../../088/build-libs-ubuntu-Release/libNetworkCommunication.so: undefined reference to `g_sVersion_NetworkCommunication'
../../../088/build-libs-ubuntu-Release/libNetworkCommunication.so: undefined reference to `BtlUdpSocketImpl::writeDatagram(QByteArray const&, QHostAddress const&, unsigned short)'
../../../088/build-libs-ubuntu-Release/libNetworkCommunication.so: undefined reference to `BtlTcpServerImpl::isListening() const'
../../../088/build-libs-ubuntu-Release/libNetworkCommunication.so: undefined reference to `BtlFileImpl::close()'
...
само собою там дальше много подобных ошибок

Проектный файл

cmake_minimum_required(VERSION 3.6)
project(maintenance)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC OFF)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Widgets REQUIRED)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Charts REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Network REQUIRED)

include_directories(../../088)

#include(FindPackageHandleStandardArgs)
#find_library(Network_LIBRARY NAMES NetworkCommunication PATHS ../../088/build-libs-ubuntu-Release)
#find_package_handle_standard_args(Network DEFAULT_MSG Network_LIBRARY)

add_library(NetworkCommunication SHARED IMPORTED)
set_property(TARGET NetworkCommunication PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/../../088/build-libs-ubuntu-Release/libNetworkCommunication.so)
set(Network_LIBRARY NetworkCommunication)

qt5_add_resources(RCC_RESOURCES resources.qrc)

file(GLOB SOURCE_FILES_2
        ${CMAKE_CURRENT_SOURCE_DIR}/cop/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/cop/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/curves/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/curves/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/curves/shapes/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/curves/shapes/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/general/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/general/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/load_cells/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/load_cells/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/motors/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/motors/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/passive_mode/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/passive_mode/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/settings/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/settings/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/system/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/system/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/../Gener095/Messages/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/../Gener095/Messages/*.cpp
        )

set(SOURCE_FILES
        Error.cpp
        Error.hpp
        main.cpp
        MainWindow.cpp
        MainWindow.h
        NetworkCommunicator.cpp
        NetworkCommunicator.h
        Utils.cpp
        Utils.h
        ITab.h
        )

add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${SOURCE_FILES_2} ${RCC_RESOURCES})

target_link_libraries(${PROJECT_NAME} ${Network_LIBRARY})
target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Charts Qt5::Xml Qt5::Network)

include(../../088/BuildUtilities/scripts/lib_setup.cmake)

Буду очень признателен за советы и помощь. Просто у меня в 5 проектах подобные проблемы с линковками в данном виде. И на 2 форумах вообще полная тишина.

make VERBOSE=1 подскажет в каком направлении копать. Еще полезно удалить целиком директорию сборки и начать все с чистого листа (могло закешироваться что-то не то).

anonymous ()
Ответ на: комментарий от anonymous

В смысле в CMakeFiles прописать это? (я еще не очень хорошо cmake знаю) По поводу чистки я это всегда делаю. Так что не в этом затык)

BlinCT ()
Ответ на: комментарий от BlinCT

В смысле ты делаешь

cmake ../
make VERBOSE=1
В результате у тебя make покажет с какими параметрами выполняются команды компиляции и линковки и ты сможешь увидеть, чего там не хватает и поймешь, какая команда в CMakeLists.txt не отработала так, как тебе нужно.

anonymous ()
Ответ на: комментарий от anonymous

Сделал все как вц и написали, вывод абсолютно тот же что я и указал выше. Такой же лог как и то что мне IDE вывела. Ничего нового. А из этого лога понятно что с линковкой библиотеки проблема. Я как раз это и написал. Я не могу правильно найти динамическую либу.

BlinCT ()
Ответ на: комментарий от BlinCT

Разумеется лог будет тем же самым, ты всего лишь включил отображение команд, которые выполняются на каждом шаге. Теперь у тебя есть информация по команде линковки (где и всплывает ошибка). Нужно проверить правильно ли указано имя библиотеки и путь к ней (также порядок библиотек имеет значение). В результате станет ясно, в каком месте нужно исправить CMakeLists.txt.

anonymous ()
Ответ на: комментарий от anonymous

Нашол этот вывод, это после указания что прога была собранна. И если я правильно понимаю то библиотека была найдена? Название libNetworkCommunication.so

-o maintenance -L/media/blinct/free1/QtProjects/Applications/095/maintenance/../../088/build-libs-ubuntu-Release -Wl,-rpath,/media/blinct/free1/QtProjects/Applications/095/maintenance/../../088/build-libs-ubuntu-Release:/media/blinct/free1/QtProjects/Applications/088/build-libs-ubuntu-Release:/media/blinct/free1/Qt/5.5/gcc_64/lib /media/blinct/free1/QtProjects/Applications/088/build-libs-ubuntu-Release/libNetworkCommunication.so -lNetworkCommunication /media/blinct/free1/Qt/5.5/gcc_64/lib/libQt5Charts.so.2.0.0 /media/blinct/free1/Qt/5.5/gcc_64/lib/libQt5Xml.so.5.5.1 /media/blinct/free1/Qt/5.5/gcc_64/lib/libQt5Network.so.5.5.1 /media/blinct/free1/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5.5.1 /media/blinct/free1/Qt/5.5/gcc_64/lib/libQt5Gui.so.5.5.1 /media/blinct/free1/Qt/5.5/gcc_64/lib/libQt5Core.so.5.5.1

BlinCT ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.