我正在尝试创建应用程序以与树莓派 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/