Qt项目与自定义共享库交叉编译Qt
Qt project with custom shared library cross compile Qt
我构建了Qt 5.9.4,用于在Raspberry Pi 3上进行交叉编译。测试应用程序一切正常。我的问题如下:
在Qt Creator中创建静态库,名为SlaveDeviceModels
。我将这个库部署到树莓上并在 rpi 上运行以下命令:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/pi/Documents/QtProjectsTests/SmartHomeServer
然后我创建了名为 SmartHomeServer
的控制台应用程序项目,并添加到该项目外部库SlaveDeviceModels
。然后我尝试通过Qt Creator运行此应用程序,但出现错误:
/home/pi/Documents/QtProjectsTests/SmartHomeServer/SmartHomeServer: error while loading shared libraries: libSlaveDeviceModels.so.1: cannot open shared object file: No such file or directory
Application finished with exit code 127.
所以我转到rpi文件夹,它如下所示:
pi@raspberrypi:~/Documents/QtProjectsTests/SmartHomeServer $ ls -l
total 3048
-rwxr-xr-x 1 pi pi 2122400 Mar 17 14:10 SmartHomeServer
-rw-r--r-- 1 pi pi 9006 Mar 17 14:04 SmartHomeServer.log
lrwxrwxrwx 1 pi pi 29 Mar 17 13:28 libSlaveDeviceModels.so -> libSlaveDeviceModels.so.1.0.0
lrwxrwxrwx 1 pi pi 29 Mar 17 13:28 libSlaveDeviceModels.so.1 -> libSlaveDeviceModels.so.1.0.0
lrwxrwxrwx 1 pi pi 29 Mar 17 13:28 libSlaveDeviceModels.so.1.0 -> libSlaveDeviceModels.so.1.0.0
-rwxr-xr-x 1 pi pi 980428 Mar 17 13:28 libSlaveDeviceModels.so.1.0.0
然后我尝试通过./SmartHomeServer
运行此应用程序,它工作正常。它开始了。
唯一的问题是当我尝试从本地计算机上的Qt Creator启动SmartHomeServer
时(交叉编译(。有没有人可以帮助我可能有问题的地方。也许Qt创建器中缺少设置?
这是我SmartHomeServer.pro
文件:
QT += core
QT -= gui
CONFIG += c++11
TARGET = SmartHomeServer
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
# Default rules for deployment.
target.path = /home/pi/Documents/QtProjectsTests/SmartHomeServer
INSTALLS += target
# here are included my headers
INCLUDEPATH += $$PWD/../SlaveDeviceModels
# I tried do something like that
#LIBS += -L/home/pi/Documents/QtProjectsTests/SmartHomeServe -lSlaveDeviceModels
# that are default lines added by qt creator
unix:!macx: LIBS += -L$$PWD/../build-SlaveDeviceModels-Raspberry_Pi_3_Kit-Debug/ -lSlaveDeviceModels
INCLUDEPATH += $$PWD/../build-SlaveDeviceModels-Raspberry_Pi_3_Kit-Debug
DEPENDPATH += $$PWD/../build-SlaveDeviceModels-Raspberry_Pi_3_Kit-Debug
解决方法是将以下代码行添加到 .pro 文件中:
unix:!mac {
LIBS += -Wl,-rpath=\$$ORIGIN/libs
}
因此,现在您可以将所有必需的库放在可执行文件的 libs 子文件夹中。
此方法在 Windows 或 Mac 上不是必需的。请记住将 qt.conf 文件用于 Qt 插件。问候。
相关文章:
- 为什么Qt必须从源代码构建以进行交叉编译?
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- Qt 模块(QtSerialPort)在Qt定制构建中找不到(针对ARM交叉编译)
- Qt在交叉编译期间构建的示例与编译后运行qmake相比如何?
- Qt项目与自定义共享库交叉编译Qt
- 交叉编译 qt:加载共享库时出错
- 仅在交叉编译 Raspberry PI 的 QT 静态时进行 eglfs
- 交叉编译Qt模块(不构建完全全新构建)并添加到现有Qt中
- 用于Raspberry Pi的交叉编译的设置QT
- 如何在QT Creator开源版本中为嵌入式Linux交叉编译qt
- 如何在将我的 QT 应用程序交叉编译为 raspberry-pi3 时修复未知错误
- QT-不能使用外部库进行交叉编译
- 交叉编译Qt(Linux/MINGW -> Windows):各种未定义的引用
- 交叉编译用于树莓派的QT应用程序-无法打开共享对象文件
- C++/QT/ARM处理器的交叉编译/编程
- 交叉编译 ARM 的 Qt 时出错
- 在 Linux 上使用 GCC 交叉编译适用于 Windows 的 Qt 应用程序
- 在树莓树莓的交叉编译 qt 中构建应用程序时出错
- 交叉编译 Qt 5
- 在Mac OSX下用Qt交叉编译Eclipse CDT