c++ - 为什么 qt/qmake 找不到我的共享库

标签 c++ qt qmake

我正在尝试创建应用程序以与树莓派 3 进行交叉编译。最初我只有一个名为“应用程序”的项目,一切都运行良好。了解项目的范围后,我认为抽象出我必须添加的类是个好主意。所以我把这个项目变成了一个子目录项目。这就是问题开始的地方。

目录如下所示

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

我关注了this guide还有几十个人在寻求指导,但没有找到。

我收到的错误是:

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

编辑: 我有一点编写构建 shell 脚本的经验,如果你认为值得我花时间,或者用其中一个继续支持 raspi 不会太困难,我可以尝试一下,然后我会有点链接更明确

最佳答案

从您发布的日志输出来看,这不是构建失败。这是运行时失败,因为加载程序找不到共享库。它找不到共享库,因为它不在默认的 LD_LIBRARY_PATH 上(或通过 /etc/ld.so.conf 配置)。

要运行您的应用程序,您可能需要在 IDE 中编辑运行配置,将 LD_LIBRARY_PATH 设置为指向其中包含 libcommon.so 的文件夹。

关于c++ - 为什么 qt/qmake 找不到我的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54203495/

相关文章:

c++ - SymFromAddr 返回 "The specified module could not be found."

c++ - 从资源加载原始文件

javascript - 迭代状态对我不起作用

c++ - 在 aux 方法中创建的 QWidget 不显示/绘制

androiddeployqt : Qt hook gradle android

c++ - 无缝知道包含空字符的字符串的大小

c++ - const指针专门化可使用MSVC生成未解析的符号,并且适用于GCC/Clang

c++ - 将 QBitArray 转换为 QByteArray

build - 在您的应用程序构建中包含 QML 源的首选方法是什么?

flags - 如何通过 QMake .pro 生成文件向 RC.EXE 添加标志