Linux下如何发布QT程序

zjb1025 发布于 2013/12/23 17:19
阅读 11K+
收藏 1
在LINUX下用QT写了一个程序,现在要放到没有装QT的linux系统电脑上运行,请问怎么发布QT程序?
谷歌了一些,没看懂,来这里找大侠们讲解一下。
请说的详细一点。
加载中
0
zjb1025
zjb1025
谢谢,我现在知道这个问题所在了。

应该是将qt使用的库libQtGui.so.4.7.4和libQtCore.so.4.7.4一起拷贝过去,并使用命令:ln -s libQtGui.so.4.7.4 libQtGui.so.4
ln -s libQtCore.so.4.7.4 libQtCore.so.4.7.4
在进行配置动态库路径:export  LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
运行就可解决这个问题。

1
mallon
mallon

把所有qt相关的库拷到可执行文件目录里即可,或者静态编译

0
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
他们必须安装qt库。然后你把编译好的文件发过去
0
学习重要
学习重要

可以自帶用到Qt的*.so,不過只有固定路徑的自帶比較簡單,搞成任意路徑比較折騰

也可以打一個deb包指明你用到的Qt庫作為依賴。Debian打包分source打包和binary打包。所謂source打包我覺得基本不是給人用的(雖然Debian發行版的包都是source打包),binary打包就是用dpkg-deb命令,很簡單,不過沒有太像樣的文檔。你自己研究或者搜索網上信息加腦補。

学习重要
学习重要
回复 @zjb1025 : control文件裡面加:http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
zjb1025
zjb1025
关键就是使用deb打包的话,怎样将需要使用的Qt库加入deb包中?
0
汤医森
汤医森

静态编译整个Qt库,然后再用这个静态Qt库编译你的程序,最终你会得到一个不低于5M的可执行文件,就可以不需要任何额外的依赖包部署到其他机器上了

如果还看不懂请自行脑补

汤医森
汤医森
回复 @学习重要 : 没看到,不过Qt的商业版授权不算贵了
学习重要
学习重要
回复 @StarGate : 我說了「對於閉源軟件」
汤医森
汤医森
回复 @学习重要 : 我记得LGPL协议允许软件源码开源的前提下静态编译,用于商业用途不允许开源库及调用部分静态编译
学习重要
学习重要
靜態編譯對於閉源軟件有許可證問題啊...當然用Qt商業版的可以不用管...
0
zjb1025
zjb1025
这个不行的,我试过了,不能跟win上一样,直接拷贝Dll库就可运行。
学习重要
学习重要
這個是因爲Linux下編譯的程序默認不把當前目錄作爲*.so的搜索路徑,但是可以通過修改rpath的方式加入當前目錄(.)
0
goodluck
goodluck

用 ldd 查看你的可执行文件依赖哪些库,全拷到同一目录下应该就行,总之缺什么拷什么

如果还找不到库再试下设定动态库路径:export  LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

ldd shuduFenxi 
        linux-gate.so.1 =>  (0x55577000)
        libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0x555ac000)
        libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0x5607f000)
        libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0x560a9000)
        libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0x56143000)
        libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0x56177000)
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x56454000)
        libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0x5646b000)
        libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0x5646e000)
        libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x56567000)
        libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x5656c000)
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x56587000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x5666d000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x56699000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x566b7000)
        libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0x56861000)
        libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0x5687a000)
        libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0x568ca000)
        libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0x568d3000)
        libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0x568ed000)
        libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0x568fe000)
        libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0x56908000)
        libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0x5691b000)
        libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0x56a4f000)
        librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x56a79000)
        /lib/ld-linux.so.2 (0x55555000)
        libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0x56a82000)
        libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0x56abf000)
        libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0x56b1b000)
        libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0x56b1f000)
        libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0x56b26000)
        libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0x56b2c000)
        libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0x56b4e000)


学习重要
学习重要
這樣的話需要一個包裝腳本...
0
汤医森
汤医森

根据以往经验,一个Qt GUI程序大概依赖100M左右的qt so以及其他各种动态库,所以比较靠谱的就是做成rpm/deb包,将依赖关系告知用户要求其安装,或者比较丑一点,做成静态编译。静态编译是一种比较丑陋的做法,但是有些应用确实需要这样。譬如三年前我发布过一个联网认证程序,用户通常是在没有网络、只装了一个基本的Ubuntu/Fedora的情况下使用我的程序,这时候肯定不能要求用户去安装依赖包,只好做成静态编译的安装包

0
zjb1025
zjb1025
不错,很好的经验分享,应该写成博客的形式就更好,方便更多的分享。
0
公孙二狗
公孙二狗
自带的帮助里有application deployment的说明
返回顶部
顶部