QT 5.8(Ubuntu 16.04)Linux上的应用程序部署
Qt 5.8 (ubuntu 16.04) application deployment on Linux
i具有使用QT 5.8创建的应用程序。该应用在Ubuntu 16.04。
上开发运行ldd app_name
后,我可以看到应用程序使用的库:
linux-vdso.so.1 => (0x00007ffe16bef000)
libmysqlclient.so.20 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 (0x00007f1f455b0000)
libQt5Widgets.so.5 => /home/r0ng/Qt/5.8/gcc_64/lib/libQt5Widgets.so.5 (0x00007f1f44d7f000)
libQt5Gui.so.5 => /home/Qt/5.8/gcc_64/lib/libQt5Gui.so.5 (0x00007f1f445e3000)
libQt5Core.so.5 => /home/Qt/5.8/gcc_64/lib/libQt5Core.so.5 (0x00007f1f43ec3000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1f43b41000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1f4392a000)
... ...
现在,我正在尝试在其他Linux机器上部署我的应用程序。我检查的第一件事是官方文档:http://doc.qt.io/qt-5/linux-deployment.html
我发现我没有配置脚本。
find -type f -name "configure*"
./Docs/Qt-5.8/qtgamepad/images/configuregamepadbuttons-example.png
./Docs/Qt-5.8/qtdoc/configure-options.html
./Examples/Qt-5.8/gamepad/configureButtons/configureButtons.pro
./Examples/Qt-5.8/gamepad/configureButtons/doc/images/configuregamepadbuttons-example.png
./5.8/gcc_64/mkspecs/features/configure_base.prf
./5.8/gcc_64/mkspecs/features/configure.prf
./5.8/android_armv7/mkspecs/features/configure_base.prf
./5.8/android_armv7/mkspecs/features/configure.prf
我是否需要以特定方式安装QT来获取配置脚本?我还尝试在QT Maintenace工具中找到脚本。但是那里什么都没有。
另一个尝试是基于此线程Linux上QT应用的部署。似乎QT项目文件(*.pro(允许开发人员将所有动态库复制到应用程序的当前工作目录。但是我没有线索来设置价值来源。在这种情况下,-wl -rpath会做什么?
有人知道如何让qt load *.so从当前工作目录中文件?
谢谢
当您从来源构建QT时,configure
脚本存在,可能不需要。要加载当前工作目录中的共享库,您需要将LD_LIBRARY_PATH
Env变量指向共享库所在的目录。您可以在官方QT文档中找到一个脚本的示例,以进行Linux部署。例如,我在部署中使用此修改后的脚本:
#!/bin/sh
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/myapp "$@"
这是我当前分发的QT应用之一的目录布局的一个示例:
./myapp
./myapp.png
./myapp.sh
./libQt5X11Extras.so.5
./libQt5Core.so.5
./libQt5Network.so.5
./libQt5XcbQpa.so.5
./libicui18n.so.56
./libQt5Gui.so.5
./libicuuc.so.56
./libicudata.so.56
./sqldrivers
./sqldrivers/libqsqlite.so
./libQt5Widgets.so.5
./translations
./translations/qt_es.qm
./translations/qt_en.qm
./platforms
./platforms/libqxcb.so
./libQt5Sql.so.5
./libQt5DBus.so.5
./bearer
./bearer/libqnmbearer.so
./bearer/libqgenericbearer.so
./bearer/libqconnmanbearer.so
./imageformats
./imageformats/libqjpeg.so
当然,根据应用程序的依赖关系,您将需要更多或多或少的库。我目前使用官方QT 5.8安装程序,因此共享库来自那里,而不是发行版提供的库。
相关文章:
- 如何在 Linux C++ 应用程序中通过管道传输到 ifstream
- 协议缓冲区2和3在同一C Linux应用程序中
- 使用完美记录进行分析Linux应用程序
- 从基本C/CPP Linux应用程序中展示状态信息
- 在OS X上编译Linux应用程序 - 未找到标准库(CMATH)
- 如何在 Linux 应用程序中专门使用其他键盘
- 为C++ Linux 应用程序创建隐藏的配置文件
- 自定义C Linux应用程序中的Google Earth
- 在Fedora 20 x86_64上编译32位Linux应用程序时,请使用SNDFILE库
- Linux:应用程序响应能力和select()
- C++linux应用程序在长时间运行后停止系统.如何找到原因
- 从 C++ 中的 Linux 应用程序发送电子邮件
- 我的 linux 应用程序端口在停止时被另一个服务占用
- 通过 CMake 2.8 静态链接 Linux C++应用程序
- 使用 RTP 的 Qt Linux 应用程序上的视频流
- 嵌入式 Linux 应用程序中的周期"lags"
- 如何在Linux应用程序上使用C++中的终端输入中断循环/进程
- 如何在大型 Linux 应用程序中以编程方式"yank the network cable"?
- 用于嵌入式Linux应用程序的交叉编译Qt
- Linux应用程序控制光学媒体