深度解析 Qt 4.5.3 移植全过程
创始人
2024-08-01 15:51:11
0

Qt 4.5.3 移植全过程是本文要介绍的内容,在概述也提到了QT 4.5是开跨平台GUI应用程序的理想选择,那么在本文主要是讲开发环境,先来看本文。

1、安装交叉编译环境

(1)下载arm-linux-gcc-3.4.1.tar.bz2(建议用的这个版本的,有些低版本的交叉编译工具在编译时会出错)

arm-linux-gcc-3.4.1.tar.bz2 的下载地址如下:

http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2

(2)解压 arm-linux-gcc-3.4.1.tar.bz2

  1. #tar -jxvf arm-linux-gcc-3.4.1.tar.bz2  

解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下

  1. # cd usr/local/   
  2. #cp -rv arm /usr/local/  

现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了

(3)修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,这里只写一种)

  1. # vi ~/.bashrc  

在最后加上:

  1. export PATH=$PATH:/usr/local/arm/3.4.1/bin  

(4)立即使新的环境变量生效,不用重启电脑

  1. #source ~/.bashrc  

(5)检查是否将路径加入到PATH:

  1. # echo $PATH  

显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。

(6)测试是否安装成功

  1. # arm-linux-gcc -v  

上面的命令会显示arm-linux-gcc信息和版本,这是我显示的信息:

  1. Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs   
  2. Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu   
  3. --prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm   
  4. -linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable   
  5. -nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable- languages=c,c++ --enable-shared --enable-c99 --enable-long-long   
  6. Thread model: posix   
  7. gcc version 3.4.1  

到这里就成功安装好了交叉编译环境

2、安装qt-x11

进入下载页面:选择Download Qt libraries 4.5 for Linux/X11(120 Mb)

  1. # aptitude install libxtst-dev   
  2. # tar -zxvf qt-x11-opensource-src-4.5.3.tar.gz   
  3. # cd qt-x11-opensource-src-4.5.3   
  4. # ./configure   
  5. # make   
  6. # make install  

qt-x11 被安装到此目录下/usr/local/Trolltech/Qt-4.5.3

编译qvfb:

  1. # cd qt-x11-opensource-src-4.5.3/tools/qvfb   
  2. # make  

至此,qt-x11安装完毕完毕

#p#

3、安装qt-embedded

选择支持arm的体系结构

  1. # tar -zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz   
  2. # cd qt-embedded-linux-opensource-src-4.5.3   
  3. #./configure -embedded arm -xplatform qws/linux-arm-g++ -no-qt3support -qt-mouse-linuxtp(我自己的设置,你可以通过查看./configure -help来设置)   
  4. #make   
  5. #make install  

qt-embeded 被安装在这个目录下/usr/local/Trolltech/QtEmbedded-4.5.3-arm 或者是/usr/local/Trolltech/QtEmbedded-4.5.3-generic

一般在/usr/local/Trolltech/QtEmbedded-4.5.3-arm

这里你可以新建一个set-env.sh文件

把下面复制到文件中

  1. export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm   
  2. export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:$PATH   
  3. exportLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib:$LD_LIBRARY_PATH  

每次用的时候进行设置

  1. #. set-env.sh   
  2. 或者是  
  3.  source set-env.sh  

安装qt-embed请参考我的这个帖子:http://www.qtcn.org/bbs/read.php?tid=22600

4、移植到开发板

下面通过NFS方式来测试是否成功(你必须提前配置好nfs)

先准备好2个nfs目录,取名为nftsroot

一个是用来备用的,取名为fonts

(1)准备库和字体

  1. #cp -a /usr/local/Trolltect/QtopiaCore-4.3.0-arm/lib /nfsroot  

然后在usr/local/Trolltect/QtopiaCore-4.3.0-arm里面收索到这些库

  1. librt.so,librt.so.1,libstdc++.so,libstdc++.so.6,libstdc++.so.6.0.1  

笔者就是在运行时就提示要这些库,所有大家还是先准备好来,然后复制到/nfsroot/lib里

  1. #ls /nfsroot/lib   
  2. fonts libQtScript.prl libQtSvg.so.4.5.3   
  3. libgcc_s.so libQtScript.so libQtTest.la   
  4. libgcc_s.so.1 libQtScript.so.4 libQtTest.prl   
  5. libQtCore.la libQtScript.so.4.5 libQtTest.so   
  6. libQtCore.prl libQtScript.so.4.5.3 libQtTest.so.4   
  7. libQtCore.so libQtScriptTools.la libQtTest.so.4.5   
  8. libQtCore.so.4 libQtScriptTools.prl libQtTest.so.4.5.3   
  9. libQtCore.so.4.5 libQtScriptTools.so libQtXml.la   
  10. libQtCore.so.4.5.3 libQtScriptTools.so.4 libQtXml.prl   
  11. libQtGui.la libQtScriptTools.so.4.5 libQtXml.so   
  12. libQtGui.prl libQtScriptTools.so.4.5.3 libQtXml.so.4   
  13. libQtGui.so libQtSql.la libQtXml.so.4.5   
  14. libQtGui.so.4 libQtSql.prl libQtXml.so.4.5.3   
  15. libQtGui.so.4.5 libQtSql.so librt-2.3.2.so   
  16. libQtGui.so.4.5.3 libQtSql.so.4 librt.so   
  17. libQtNetwork.la libQtSql.so.4.5 librt.so.1   
  18. libQtNetwork.prl libQtSql.so.4.5.3 libstdc++.so   
  19. libQtNetwork.so libQtSvg.la libstdc++.so.6   
  20. libQtNetwork.so.4 libQtSvg.prl libstdc++.so.6.0.1   
  21. libQtNetwork.so.4.5 libQtSvg.so pkgconfig   
  22. libQtNetwork.so.4.5.3 libQtSvg.so.4   
  23. libQtScript.la libQtSvg.so.4.5  

当然这些库文件不是每个都需要,用户可以根据自己的应用来选择

#p#

接下来将开发板和主机通过网线连接起来,并在开发板里进行mount

  1. #mount -t nfs 192.168.0.10:/nfsroot /mnt -o nolock   
  2. #ls /mnt   
  3. lib  

接下来事字体(在lib目录的fonts),字体比较麻烦,

根据文档说明,Qtopia默认查找字体的目录是/usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts

我们有两种方式来挂载字体库。

第一种:

  1. #mount -t ramfs ramfs /usr   
  2. #cd /usr   
  3. #mkdir local && mkdir local/Trolltech   
  4. #ln -s /mnt local/Trolltech/QtEmbedded-4.5.3-arm   
  5. #ls /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib/fonts  

这样我们就配置好了。

如果上一种方法不行,看下面这种,一定可以!

第二种:

首先用到刚才的备用的nfs目录 fonts(看名字就晓得用来挂载字体库的)

  1. #cp -arf /usr/local/Trolltect/QtopiaCore-4.3.0-arm/lib/fonts /fonts  

在开发板里

  1. #mount -t nfs 192.168.0.10:/fonts /usr/local/Trolltech/QtEmbedded-4.5.3-arm -o nolock  

这样就把字体库链接到 /usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts目录来了

第二种方法是我同学想出来的,很不错吧,他的博客是:http://hi.baidu.com/armlinuxhouse/blog/item/c2fb91ca42b0811d7f3e6f10.html 里面有很多好的文章!

5、交叉编译Hello World 程序

首先写一个hello.cpp的程序

  1. #qmake -project   
  2. #qmake  

得到一个hello的arm可执行程序(通过file命令来查看它所属的cpu)

并将该

  1. #cp hello /nfsroot  

然后在超级终端里运行

  1. #export LD_LIBRARY_PATH=/mnt/lib:$LD_LIBRARY_PATH   
  2. #cd /mnt   
  3. #./hello -qws  

这样就能看到你的运行程序了!

小结:Qt 4.5.3 移植全过程介绍完了,希望本篇文章对你有帮助!

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...