在Ubuntu上使用共享库部署Qt应用程序二进制文件 [英] Deploy Qt Application binaries on Ubuntu with shared libs

查看:948
本文介绍了在Ubuntu上使用共享库部署Qt应用程序二进制文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想部署我在任何VanillaUbuntu上运行的Qt应用程序。它可以是一个.deb包,或者只是具有所需库的二进制文件。事实是,我不知道如何做。



我试图遵循本教程: https://lemirep.wordpress.com/2013/06/01/deploying-qt-applications-on-linux-and-windows-3/我实际上设法使应用程序在另一台计算机上运行,​​但是它应该播放一些视频,并得到如下信息:


defaultServiceProvider :: requestService():找不到服务 - org.qt-project.qt.mediaplayer


我可能错过了一些libs。但我真的不知道哪一个。当我在我的二进制文件上运行ldd时,一切似乎都可以。



ldd的结果如下:

  libQt5MultimediaWidgets.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5MultimediaWidgets.so.5(0x00007f02a0adf000)
libQt5Multimedia.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Multimedia.so.5(0x00007f02a07fc000)
libQt5Widgets.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5(0x00007f029ffb9000)
libQt5Xml.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Xml.so.5(0x00007f029fd7b000)
libQt5Network.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Network.so.5(0x00007f029fa17000)
libQt5Gui.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Gui.so.5(0x00007f029f2f3000)
libQt5Core.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Core.so.5(0x00007f029ebbf000)
libstdc ++。so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6(0x00007f029e8a1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1(0x00007f029e68a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6(0x00007f029e2c4000)
libQt5OpenGL.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5OpenGL.so.5(0x00007f029e06a000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1(0x00007f029dd98000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6(0x00007f029da92000)
libpulse.so.0 => /usr/lib/x86_64-linux-gnu/libpulse.so.0(0x00007f029d849000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0(0x00007f029d62a000)
libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0(0x00007f029d3d9000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0(0x00007f029d0d1000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6(0x00007f029cd9b000)
libicui18n.so.52 => /home/mauker/Qt/5.3/gcc_64/lib/libicui18n.so.52(0x00007f029c97b000)
libicuuc.so.52 => /home/mauker/Qt/5.3/gcc_64/lib/libicuuc.so.52(0x00007f029c5f2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2(0x00007f029c3ee000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0(0x00007f029c1ec000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1(0x00007f029bfe3000)
/lib64/ld-linux-x86-64.so.2(0x00007f02a0cff000)
libjson-c.so.2 = > /lib/x86_64-linux-gnu/libjson-c.so.2(0x00007f029bdd8000)
libpulsecommon-4.0.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-4.0.so(0x00007f029bb70000)
libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3(0x00007f029b92b000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6(0x00007f029b723000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3(0x00007f029b4e4000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1(0x00007f029b2c5000)
libicudata.so.52 => /home/mauker/Qt/5.3/gcc_64/lib/libicudata.so.52(0x00007f0299a5a000)
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0(0x00007f029984f000)
libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1(0x00007f02995e7000)
libasyncns.so.0 => /usr/lib/x86_64-linux-gnu/libasyncns.so.0(0x00007f02993e0000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6(0x00007f02991dc000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6(0x00007f0298fd6000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1(0x00007f0298dbb000)
libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8(0x00007f0298b8a000)
libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2(0x00007f02986bb000)
libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0(0x00007f029848d000)
libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0(0x00007f0298284000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2(0x00007f0298069000)

我试过将这些库中的每一个都复制到一个名为lib的文件夹,然后我使这个脚本运行我的应用程序:

 #/ bin / sh 
export QTDIR =
export QT_PLUGIN_PATH =
export LD_LIBRARY_PATH =`pwd` / libs
export QT_QPA_PLATFORM_PLUGIN_PATH =`pwd` / libs / platforms
./App

我显然在这里遗漏了一些东西,没有线索在哪里看。你们可以帮我吗?在Ubuntu上部署我的程序是否有更简单的方法?我应该尝试使用.deb包吗?如果是这样,我该怎么做一个Qt应用程序?



编辑:好的,我设法解决了第一个错误设置QT_PLUGIN_PATH到 pwd / lib - 但现在我有这个消息:


没有解码器可用于video / x-h264(...)


可以通过单独安装ffmpeg库来解决。但是,我真的很想捆绑所有的libs,或者像我之前说过的那样,使一个.deb包解决了用户的一切。

解决方案

为了解决您的编解码问题,目标pc将需要安装相应的gstreamer库,然后依赖(ffmpeg),然后是ffmpeg依赖关系,一个等等....



您将处于一个痛苦的世界,因为您将结束捆绑大量图书馆,因为某些deps需要其他deps。我建议你采取deb包装路线,所以所有的依赖将被自动处理。



检查 ubuntu包装指南或debian一个。您应该将deb包装问题分解在另一个帖子中,以便您获得更好的回复。


I want to deploy a Qt application I've made to run on any "Vanilla" Ubuntu. It could be a .deb package, or simply the binary with the required libraries. Thing is, I'm not sure how to do either.

I've tried to follow this tutorial: https://lemirep.wordpress.com/2013/06/01/deploying-qt-applications-on-linux-and-windows-3/ and I actually managed to make the application run on another computer but... It's supposed to play some videos and I got a message like:

defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"

I've probably missed some libs. But I really don't know which ones. When I run ldd on my binary file, everything seems to be ok.

The results of the ldd are as follows:

libQt5MultimediaWidgets.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5MultimediaWidgets.so.5 (0x00007f02a0adf000)
libQt5Multimedia.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Multimedia.so.5 (0x00007f02a07fc000)
libQt5Widgets.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5 (0x00007f029ffb9000)
libQt5Xml.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Xml.so.5 (0x00007f029fd7b000)
libQt5Network.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Network.so.5 (0x00007f029fa17000)
libQt5Gui.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Gui.so.5 (0x00007f029f2f3000)
libQt5Core.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5Core.so.5 (0x00007f029ebbf000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f029e8a1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f029e68a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f029e2c4000)
libQt5OpenGL.so.5 => /home/mauker/Qt/5.3/gcc_64/lib/libQt5OpenGL.so.5 (0x00007f029e06a000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f029dd98000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f029da92000)
libpulse.so.0 => /usr/lib/x86_64-linux-gnu/libpulse.so.0 (0x00007f029d849000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f029d62a000)
libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f029d3d9000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f029d0d1000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f029cd9b000)
libicui18n.so.52 => /home/mauker/Qt/5.3/gcc_64/lib/libicui18n.so.52 (0x00007f029c97b000)
libicuuc.so.52 => /home/mauker/Qt/5.3/gcc_64/lib/libicuuc.so.52 (0x00007f029c5f2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f029c3ee000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f029c1ec000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f029bfe3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f02a0cff000)
libjson-c.so.2 => /lib/x86_64-linux-gnu/libjson-c.so.2 (0x00007f029bdd8000)
libpulsecommon-4.0.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-4.0.so (0x00007f029bb70000)
libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f029b92b000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f029b723000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f029b4e4000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f029b2c5000)
libicudata.so.52 => /home/mauker/Qt/5.3/gcc_64/lib/libicudata.so.52 (0x00007f0299a5a000)
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007f029984f000)
libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f02995e7000)
libasyncns.so.0 => /usr/lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007f02993e0000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f02991dc000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f0298fd6000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f0298dbb000)
libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f0298b8a000)
libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f02986bb000)
libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f029848d000)
libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007f0298284000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f0298069000)

I've tried to copy every single one of those libs to a folder called "lib", and then I've made this script to run my app:

#!/bin/sh
export QTDIR=""
export QT_PLUGIN_PATH=""
export LD_LIBRARY_PATH=`pwd`/libs
export QT_QPA_PLATFORM_PLUGIN_PATH=`pwd`/libs/platforms
./App

I'm obviously missing something here, but I have no clue where to look. Can you guys help me out with this? Is there a simpler way to deploy my program on Ubuntu? Should I try to make the .deb package? If so, how do I do it for a Qt application?

EDIT: Ok, I've managed to solve the first error setting my QT_PLUGIN_PATH to pwd/lib - But now I've got this message:

No decoder available for type 'video/x-h264(...)'

Which could be solved by installing ffmpeg library separately. But I'd really like to bundle all the libs somehow, or like I said before, to make a .deb package that solves everything for the user.

解决方案

To solve your codec problem the target pc will need to have the corresponding gstreamer library installed, then its dependencies (ffmpeg), then the ffmpeg dependencies, an so on....

You will be in a world of pain as you will end bundling A LOT of libraries since some deps requires other deps. I suggest you to take the deb packaging route so all the dependencies will be handled automatically.

Check the ubuntu packaging guide or the debian one. You should split your deb packaging question in another post so you will get better responses.

这篇关于在Ubuntu上使用共享库部署Qt应用程序二进制文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆