像我儿子一样永远保持好奇和梦想

[z]Qt交叉编译工具建立 中篇

上一篇 / 下一篇  2012-09-11 14:57:04 / 个人分类:linux

  

Qt交叉编译工具建立 中篇

2011-06-23 18:04 佚名 互联网 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

本文介绍了Qt交叉编译工具建立,主要介绍了Qt/Embedded 的交叉编译,建立本机Qtopia 虚拟平台,其他内容想要了解请看本文指引。先来看本篇内容。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台*g{ R C.?h k+y C

AD: 51CTO云计算架构师峰会 抢票进行中! 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台2{ Sk4?Q$|v

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台B+mh,~|%hZ

9f8u"T*K6W$v N(c0继续上面的内容继续讲 Qt交叉编译工具建立 上篇 ,主要介绍了Qt/Embedded 的交叉编译,建立本机Qtopia 虚拟平台这两个方面介绍的!龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台M y6`)p,b

%d6sG#sFCu o0一、Qt/Embedded的交叉编译龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台!Jh b\#u Z%L?@3K\5N

gPR$N+EM,j0 要将我们写好的程序发布到开发板上,我们需要对Qt/Embedded 重新编译,与前面在宿主机上编译类似,步骤如下:

p9O E.H!R j-o6M9^0 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&OGMko6Q%r)m%Hj]

1. Build Qt/Embedded龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 ~&h)n kt tN

  1. tar –xzvf qt-embedded-2.3.10-free.tar.gz
  2. mv qt-2.3.10
  3. qt-2.3.10-target
  4. export TMAKEDIR=$PWD/tmake-1.13
  5. export QT2DIR=$PWD/qt-2.3.2
  6. export QTEDIR=$PWD/qt-2.3.10-target
  7. cd $QTEDIR
  8. export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
  9. export QTDIR=$QTEDIR
  10. export PATH=$QTDIR/bin:$PATH
  11. export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  12. make clean
  13. ./configure -xplatform. linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
  14. make
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Q0NW}y!TD lh CF

这步完成后,我们会在/$QTEDIR/lib/目录下面看到libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.10 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在开发板上跑的库。

SN5I;jg9}!? _0
  1. file libqte.so.2.3.10
  2. libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped

,V V!d/Q5\N0有了这个库以后我们就可以把它拷贝到我们的开发板中相应的库目录下面,这里我们选择了开发板上的/usr/lib 目录,将/$QTEDIR/lib/下的libqte.so*复制到/usr/lib 目录下。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9Z7Ikbv e!J6]3I

Ue0lK,lkn0首先要建立宿主机和开发板的通讯,假设本机的ip 地址为192.168.0.56 并且/root/share 为共享文件夹。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台*WTFpGMD

  1. cp –arf /$QTEDIR/lib/libqte.so* /root/share
  2. 启动minicom
  3. mount –t nfs –o nolock 192.168.0.56:/root/share /mnt/nfs将文件复制到开发板上
  4. cp –arf /mnt/nfs/libqte.so* /usr/lib

5e+y0B-y1T1|e02. 修改tmake 配置文件龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台P ]\6RO

  1. vi $ TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
  2. 将其中“TMAKE_LINK= arm-linux-gcc”
  3. TMAKE_LINK_SHLIB= arm-linux-gcc”
  4. 修改为:“TMAKE_LINK= arm-linux-g++”
  5. TMAKE_LINK_SHLIB= arm-linux-g++”

\(O(? n6~#g03.生成可执行文件龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台2v5bd9\s t"j0Z2P
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台!O8H LK5K
这里我们采用了Qt/Embedded自带的一个demo,它在/$QTEDIR/examples/progressbar目录下,这个目录包括下面几个文件: main.cpp、Makefile.in 、progressbar.h 、龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台e }6nK0`(v!i n/Wu@

^j!UQM2WzZ$Z0Makefile、progressbar.cpp、progressbar.pro,如果已经有了progressbar 的执行文件,可以使用make clean删除。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台@/C3['T4b$iH^

  1. progen –t app.t –o progressbar.pro
  2. echo $TMAKEPATH
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 D{+Ob&|\

查看返回的结果的结尾字符是否是“……/qws/linux-arm-g++”,如果不是的话需要在命令行中重新设置TMAKEPATH龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台)NKM\7k3Q"c:] @

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台fmEX%|-{I$J0f

export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g++龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台N'K!uh3U4[

^p y"Q3T@k#z0此外还要使QTDIR指向Qt/Embedded 的安装路径,如:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台@6L0FD7n/X {]#O

_v N8R};K0export QTDIR=$QTEDIR 或者直接指定路径

,} |!b,W~ ~U0
  1. export QTDIR=……/qt-2.3.10-target
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台4Hq3H+NO2mq(|A

完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以使用tmake 工具来生成我们需要的makefile 文件,在命令行中输入如下命令:

?/MI,_we:Yi0
  1. tmake –o makefile progressbar.pro
  2. make

NYhVDiJ.Ql t0如果没出现错误的话就可以在当前目录下找到progressbar这个可执行文件,它就是在我们开发板上的相应目录中运行“./progressbar -qws”就可以运行程序了。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台;gh0OU? J+V
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台\"}4Og*R e
注: (1)如果执行命令

6nI4{;[G-a$[-ly0
  1. [/mnt/nfs]./progressbar -qws
  2. ./progressbar: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or direy
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Gfj;~{ Z K4Gll

我的解决办法是从编译器目录下查找,并拷贝到开发板/usr/lib/中龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台LQ/dM \"X

B(Kv'EmY vTg9T0
AI6j\3f g|0即拷贝/usr/local/arm/3.4.1/arm-linux/lib/libstdc++.so* 到开发板/usr/lib/中

1Ds?9P4T#K Ndg0

0[G2ES*T6g,Ff.f+Z8p0(2).[/mnt/nfs]./progressbar –qws

)o xj,a2f#}hMk];`0
  1. /progressbar: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such fy

!nS-K:AeH0方法同上龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台"ow's4y3T/w ]

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Mk@V5C Dy"G

二、建立本机Qtopia 虚拟平台龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 zwp$I'fMk0G~4L^
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台$P$Y7f z6B
软件:Redhat Linux9.0 for PC + minicom + Embeded Linux for 2410龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 oO;FMa~:q

  1. tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.bz2 qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz

'p'K F9{T9I0将本次实验所需的四个文件拷贝到/root/qtopia 目录下,我们以下的实验都是在这个目录下进行的。

Q3t$JP["nzYh0 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台h&GvG}#}ALc4o

宿主机上建立虚拟的Qtopia 环境需要以下几个步骤:

4`*` sx1~0 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台(vG ev p aj

1. 解压缩安装文件:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台3os vPO$j

  1. tar jxvf qtopia-free-source-2.1.1.tar.bz2
  2. mv qtopia-2.1.1 qtopia-2.1.1-target
  3. tar xzf tmake-1.13.tar.gz
  4. tar xzf qt-x11-2.3.2.tar.gz
  5. tar xzf qt-embedded-2.3.10-free.tar.gz
  6. mv qt-2.3.10 qt-2.3.10-target
  7. export QPEDIR=$PWD/qtopia-2.1.1-target
  8. export TMAKEDIR=$PWD/tmake-1.13
  9. export QT2DIR=$PWD/qt-2.3.2
  10. export QTEDIR=$PWD/qt-2.3.10-target
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9i&l6X])\L(i)F W

2. Build Qt/X11: 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台q)d7|gp

  1. cd $QT2DIR
  2. export TMAKEPATH=$TMAKEDIR/lib/linux-g++
  3. export QTDIR=$QT2DIR
  4. export PATH=$QTDIR/bin:$PATH
  5. export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  6. ./configure -no-xft
  7. make
  8. mkdir $QTEDIR/bin
  9. cp bin/uic $QTEDIR/bin/
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台nY;Bb2s

3. Build Qvfb:

b ^(DW@@0
  1. export TMAKEPATH=$TMAKEDIR/lib/linux-g++
  2. export QTDIR=$QT2DIR
  3. export PATH=$QTDIR/bin:$PATH:$TMAKEDIR/bin
  4. export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  5. cd $QTEDIR/tools/qvfb
  6. tmake -o Makefile qvfb.pro
  7. make
  8. mv qvfb $QTEDIR/bin/

'i k1}"I~)U$F-C04.Build libqte:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台#A%Z h'J(\,Q

  1. cd $QTEDIR
  2. export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
  3. export QTDIR=$QTEDIR
  4. export PATH=$QTDIR/bin:$PATH
  5. export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  6. cp -f $QPEDIR/src/qt/qconfig-qpe.h src/tools/
  7. ./configure -system-jpeg -no-xft -qconfig qpe -qvfb -depths 4,8,16,32
  8. make sub-src
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台(EEI.@%E(G,B

5.Build Qtopia:

@ ^r!{ i C0
  1. cd $QPEDIR
  2. export QTDIR=$QTEDIR
  3. export PATH=$QPEDIR/bin:$PATH
  4. export
  5. LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
  6. ./configure
  7. make
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台1{ ~}5]cv:LC/tK

和前面编译Qt/Embedded 的基本步骤一样,还可以参考“./configure --help”,来进行选择。为了保证qvfb 能够正确显示qtopia 的结果,我们必须保证环境变量设置正确,我们可以通过“env”命令来检查下面的环境变量,也可以用下面的方法来检查。

9B-n j@F9T0
  1. echo $QPEDIR
  2. /root/qtopia/qtopia-free-2.1.1/
  3. echo $QTDIR
  4. /root/qtopia/qt-2.3.10
  5. echo $LD_LIBRARY_PATH
  6. /root/qtopia/qtopia-free-2.1.1/lib:/root/qtopia/qt-2.3.10/lib
  7. echo $PATH
  8. /root/qtopia/qt-2.3.10/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local
  9. /sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台lL j+}}K|1D

出现上面的结果就可以正常的显示Virtual framebuffer,我们可以通过下面的命令在Virtual framebuffer 中实现Qtopia。

s Zo`$G6P/FS0
  1. cd $QPEDIR/bin
  2. qvfb &
  3. sleep 10
  4. ./qpe.sh
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台N+E#N*f].wu

小结:关于Qt交叉编译工具建立的内容介绍完了,想要深入了解的话,请继续关注 Qt交叉编译工具建立 下篇 ,最后希望本文对你有所帮助!龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Gu0oz0h&ZIr#DU

z6g1^,zHDS'I@(L;L0【编辑推荐】

#c0xI0P%q/s(sZ0
 

ref:
【责任编

TAG: 工具 互联网

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar