Почему qt / qmake не может найти мою общую библиотеку - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь создать приложение для кросс-компиляции с помощью raspberry pi 3. Изначально у меня был только проект под названием «application», и все работало замечательно. Зная масштаб проекта, я подумал, что было бы неплохо абстрагироваться от классов, которые я обязательно добавлю. Поэтому я превратил проект в проект subdirs. То есть, когда начались проблемы.

Каталог выглядит следующим образом

IntegratedSmartHome.pro       subdirs
-->Application.pro            app
-->Libs.pro                   subdirs
---->common.pro               library

Я следовал этому руководству и еще пару десятков других людей искали руководство, и ни один не был найден.

Я получаю ошибку:

10:37:03: Starting /home/jesse/Projects/build-integratedSmartHome-Desktop_Qt_5_11_1_GCC_64bit-Debug/application/application...
/home/jesse/Projects/build-integratedSmartHome-Desktop_Qt_5_11_1_GCC_64bit-Debug/application/application: error while loading shared libraries: libcommon.so.1: cannot open shared object file: No such file or directory
10:37:03: /home/jesse/Projects/build-integratedSmartHome-Desktop_Qt_5_11_1_GCC_64bit-Debug/application/application exited with code 127

Изображение папки libs после сборки

Любое руководство о том, как это исправить, будет оценено! Я включу мои 4 .pro файлы ниже. примечание: я не получаю ошибок сборки

IntegratedSmartHome.pro:

TEMPLATE = subdirs

SUBDIRS += \
    libs \
    application

application.depends = libs

CONFIG += ordered

Application.pro

QT += gui quick
CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    smartdevicesmodel.cpp \
    globalproperties.cpp

HEADERS += \
    smartdevicesmodel.h \
    globalproperties.h

RESOURCES += \
        res/res.qrc

INCLUDEPATH += ../libs/common

LIBS += \
    -L../libs/common -lcommon

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

Libs.pro

TEMPLATE = subdirs

SUBDIRS += \
    common

CONFIG += ordered

Common.pro

QT -= gui

CONFIG += c++11
CONFIG -= app_bundle

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    devicetype.cpp \
    smartdevice.cpp

HEADERS += \
    devicetype.h \
    smartdevice.h

! include( ../libs.pri ) {
    error( "Couldn't find the libs.pri file!" )
}

# Default rules for deployment.
#qnx: target.path = /tmp/$${TARGET}/bin
#else: unix:!android: target.path = /opt/$${TARGET}/bin
#!isEmpty(target.path): INSTALLS += target

Libs.pri

INCLUDEPATH += . ..
WARNINGS += -Wall

TEMPLATE = lib

UI_DIR = uics
MOC_DIR = mocs
OBJECTS_DIR = objs

EDIT: У меня есть небольшой опыт написания сценариев сборки оболочки, если вы считаете, что это стоит моего времени, или если вам не составит труда продолжать поддерживать распи с одним из них, я мог бы попробовать это, и тогда я был бы немного более явный со ссылкой

1 Ответ

0 голосов
/ 15 января 2019

Это не ошибка сборки, судя по выводу журнала, который вы разместили. Это сбой во время выполнения, потому что загрузчик не может найти общую библиотеку. Он не может найти разделяемую библиотеку, потому что он не по умолчанию LD_LIBRARY_PATH (или не настроен с помощью /etc/ld.so.conf).

Чтобы запустить ваше приложение, вы, вероятно, захотите отредактировать конфигурацию запуска в IDE, установив LD_LIBRARY_PATH, чтобы она указывала на папку с вашим libcommon.so в ней.

...