21:25 2014/9/20
首先感谢老大耐心教导
以下是老大操作过程
虚拟机上的操作
进入QtEmbedded-4.7.2-arm运行库文件目录
cd /usrlocal/QtEmbedded-4.7.2-arm/Trolltech/QtEmbedded-4.7.2-arm
[fedora@localhost QtEmbedded-4.7.2-arm]$ tar ^C
[fedora@localhost QtEmbedded-4.7.2-arm]$ cd ..
[fedora@localhost Trolltech]$ tar czf QtEmbedded-4.7.2-arm.tar QtEmbedded-4.7.2-arm/
tar: QtEmbedded-4.7.2-arm.tar: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
[fedora@localhost Trolltech]$ sudo !!
sudo tar czf QtEmbedded-4.7.2-arm.tar QtEmbedded-4.7.2-arm/
[fedora@localhost Trolltech]$ ls
QtEmbedded-4.7.2-arm QtEmbedded-4.7.2-arm.tar QtEmbedded-4.8.3-arm
然后把QtEmbedded-4.7.2-arm.tar传到开发板
我直接用tf卡拷贝到开发板,然后在开发板上执行如下操作
把QtEmbedded-4.7.2-arm.tar(qt4.7.2运行库文件)解压到/usr/local/Trolltech/QtEmbedded-4.7.2-arm
tar -xvf target-qte-4.7.2.tgz
(这里是老大操作太快,没看清,后来自己查到的,
[root@jyxtec QtEmbedded-4.7.2-arm]# pwd
/usr/local/Trolltech/QtEmbedded-4.7.2-arm
)
再然后把switch_to_qt4(环境变量切换脚本)脚本(helper2416光盘\Helper2416\sourceqt4.7.2.tar.gz包里)也拷贝到开发板里,执行switch_to_qt4
[root@jyxtec local]# cd /
[root@jyxtec /]# . /switch_to_qt4
switch to qt4 sucess
运行qt程序untitled
运行程序一定要注意:
从网上看到的一段
命令: /你的应用程序名 -qws
注意了: 前面的/是必须的,且在它前面不要乱加“.”命令,我当时就是不小心加多了,导致界
面上始终无法进行鼠标(触摸)事件的响应,这个问题害我陷入好几天,后来在陈老大的提醒下,才反应过来
可是老大操作的是
[root@jyxtec /]# ./untitled -qws
-/bin/sh: ./untitled: Permission denied
[root@jyxtec /]# chmod +x untitled
[root@jyxtec /]# ./untitled -qws
发现触摸可以正常用
3. 如果要切换为qtopia环境:
命令: /bin/qtopia 或 直接重启开发板
感谢老大!!!
2014.10.13日笔记:
今天编译了一个Qt程序,成功下载到开发板上,然后按照上面运行程序:
. /switch_to_qt4
./untitled -qws
这是发现一个问题,退出Qtopia2.2进入untitled 后,触摸屏的X轴坐标和Y轴坐标是反着的,但是在Qtopia2.2上触摸时准确的.
很疑惑,后来咨询了一下老大,老大告知在Qtopia2.2上做一下触摸校准,但是后来一想,Qtopia2.2上的触摸已经是正确的了,可能
不是Qtopia2.2校正能解决的问题,再次咨询老大,老大告知在使用. /switch_to_qt4命令时,用source方式
于是重新试了一下,过程如下:
source ./switch_to_qt4
./untitled -qws
此时问题解决了,不在存在XY呼唤的问题.
疑惑:
用source 执行脚本和用sh 执行脚本有什么区别?
source不是直接执行一个文件,而是从一个文本文件里面读命令行,然后执行这些命令。比如: # echo "ls" >; bb # echo "date" >;>; bb # cat bb ls date # source bb 2005125113516.mp3 Desktop mybsd Sat Jul 9 22:55:04 CST 2005 |
Linux下如何发布QT程序 (转载http://www.oschina.net/question/227088_138489?sort=default&p=1)
在LINUX下用QT写了一个程序,现在要放到没有装QT的linux系统电脑上运行,请问怎么发布QT程序?
谷歌了一些,没看懂,来这里找大侠们讲解一下。 请说的详细一点。
谢谢,我现在知道这个问题所在了。
应该是将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
运行就可解决这个问题。
把所有qt相关的库拷到可执行文件目录里即可,或者静态编译
你可以自帶用到Qt的*.so,不過只有固定路徑的自帶比較簡單,搞成任意路徑比較折騰
也可以打一個deb包指明你用到的Qt庫作為依賴。Debian打包分source打包和binary打包。所謂source打包我覺得基本不是給人用的(雖然Debian發行版的包都是source打包),binary打包就是用dpkg-deb命令,很簡單,不過沒有太像樣的文檔。你自己研究或者搜索網上信息加腦補。
--- 共有 2 条评论 ---
- 学习重要回复 @zjb1025 : control文件裡面加:http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles (9个月前)
- zjb1025关键就是使用deb打包的话,怎样将需要使用的Qt库加入deb包中?
-
静态编译整个Qt库,然后再用这个静态Qt库编译你的程序,最终你会得到一个不低于5M的可执行文件,就可以不需要任何额外的依赖包部署到其他机器上了
如果还看不懂请自行脑补
这个不行的,我试过了,不能跟win上一样,直接拷贝Dll库就可运行。
--- 共有 1 条评论 ---
- 学习重要這個是因爲Linux下編譯的程序默認不把當前目錄作爲*.so的搜索路徑,但是可以通過修改rpath的方式加入當前目錄(.) (9个月前)
-
用 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)
- 根据以往经验,一个Qt GUI程序大概依赖100M左右的qt so以及其他各种动态库,所以比较靠谱的就是做成rpm/deb包,将依赖关系告知用户要求其安装,或者比较丑一点,做成静态编译。静态编译是一种比较丑陋的做法,但是有些应用确实需要这样。譬如三年前我发布过一个联网认证程序,用户通常是在没有网络、只装了一个基本的Ubuntu/Fedora的情况下使用我的程序,这时候肯定不能要求用户去安装依赖包,只好做成静态编译的安装包
- 自带的帮助里有application deployment的说明
-
Linux下发布QT程序(http://blog.csdn.net/wjh_monkey/article/details/9857935)
概述
无论在windows下还是在linux下,可执行程序的运行都依赖于相关的运行库,我们需要将依赖的库找到放到特定的位置,让可执行文件能够找到。在不知道可执行文件依赖哪些库时,有时可以让它自己告诉你,例如直接运行程序会输出缺少的库名,执行ldd命令查看可执行文件的依赖库。
所以发布程序就是将必要的文件放到指定的位置,并修改某些系统配置。
我发布的环境为X86下的ubuntu 10.04-desktop。
QT程序依赖的库
在linux中,一般依赖的库会放在/usr/lib目录中,查找libQt*会显示与Qt相关的库。有些库我们的程序不需要,我们可以在命令窗口中运行程序,它会输出因为缺少哪些库而不能运行,缺少的库在/usr/lib中找到,拷贝过去即可。
例如我的程序提示依赖libQtGui.so.4、libQtNetwork.so.4、libQtCore.so.4和libaudio.so.2这4个库。将这4个库拷贝过去,然后进入/usr/lib,执行如下命令:
ln -slibQtGui.so.4.6.2 libQtGui.so.4
ln -s libQtNetwork.so.4.6.2 libQtNetwork.so.4
ln -slibQtCore.so.4.6.2 libQtCore.so.4
ln -s libaudio.so.2.4 libaudio.so.2
程序即可运行。
QT中的QImage
我的程序中使用到了QImage,程序可以正常运行,但图片不能加载。网上查找资料说QImage需要依赖plugins。对于plugins我不了解也不知道QT的安装目录(通过apt-get install安装的qt),所以我全局搜索plugins文件,选择在x86环境下的plugins。我拷贝的plugins目录在/usr/lib/qt4/目录下。将整个文件夹拷贝到目标机子上,然后将其导出。
我的操作如下:
Plugins目录拷贝到/usr/local/下;
编辑/etc/profile,在文件的最后加入如下两行:
export LD_LIBRARY_PATH=/usr/local/plugins/imageformats:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/usr/local/plugins
发布结束
发布完成后运行程序,一切正常。
-
如何在没有Qt开发环境的机器上运行Qt程序
[日期:2010-12-02] |
来源:Qt社区 作者:Et |
[字体:大 中 小] |
系统环境:Linux ,我用的是Ubuntu
1、 将代码编译成可执行文件
2、 将可执行文件跟它所依赖的库文件放在同一文件夹下复制至目标机器,一般Qt程序都会需要: libQtGui.so.4 跟 libQtCore.so.4,文件后缀的数字是Qt的版本,你直接在你的机器上找到这两个文件就可以了
3、 在目标机器上运行前,设置环境变量 LD_LIBRARY_PATH=/程序文件夹的路径/:$LD_LIBRARY_PATH,然后就目标机器上可以成功运行Qt程序了
ps. 如果你是在windows下开发的话,【LINUX公社 www.LinuxIDC.com 】可参考下面的内容。
Qt Creator发布release软件相关注意事项
注意:环境是windows
选择release编译程序后生成exe文件
1.需要Qt安装目录下的qt/bin目录中的QtGui4.dll 和 Qt Core4.dll以及mingwm10.dll三个文件的支持,将它们拷贝到exe文件目录下。
2.程序中默认只支持png图片,如果使用了gif,jpg等格式的文件是显示不出来的。需要将Qt安装目录下的qt/plugins/目录中的imageformats文件夹拷贝到exe文件目录下(注意是整个文件夹)。而imageformats文件夹中只需要保留你需要的文件,例如你只需要支持gif文件,就只保留qgif4.dll即可。