| |
 |
|
 |
 |
|
 |
建立Embedded QT 开发环境
|
|
|
|
本文主要内容为编译器的安装,安装与建立Qt 桌面运行环境,Qt/E 的交叉编译,建立本机Qtopia 虚拟平台, 预备:编译器安装 编译器: arm-linux-gcc-3.4.1.tar.bz2
一. 安装与建立Qt 桌面运行环境
软件:PC 机操作系统FC2+MINICOM + ARM-LINUX 开发环境 tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2 .tar.gz
把本次实验用到的三个文件拷贝到/public/qt目录下,以下的步骤是假设你在/public/qt下操作的。 Qt/Embedded 平台的搭建需要以下几步: 第一步,解压安装包并设置环境变量 tar –xzvf tmake-1.13.tar.gz tar –xzvf qt-x11-2.3.2.tar.gz tar –xzvf qt-embedded-2.3.10-free.tar.gz mv qt-2.3.10 qt-2.3.10-host export TMAKEDIR=$PWD/tmake-1.13 export QT2DIR=$PWD/qt-2.3.2 export QTEDIR=$PWD/qt-2.3.10-host 环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包. 注意: 在以下安装中,make命令执行前先执行一下make clean命令. 第二步,编译Qt/Embedded。 1. Build Qt2.3.2 cd $QT2DIR export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH make clean ./configure -no-xft make mkdir $QTEDIR/bin cp bin/uic $QTEDIR/bin/ 2. Build Qvfb export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/tools/qvfb make clean tmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/ 这一步build qvfb 并建立了从Qt/Embedded 2.3.10 到Qt 2.3.2 的静态库的链接。其中qvfb 工具用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开发板上运行。 3. Build Qt/Embedded cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH make clean ./configure -no-xft -qvfb -depths 4,8,16,32 此时我选择的5 make 第三步 查看运行结果 如果上面各步都能够成功的编译通过,下面就可以通过运行 Qt/Embedded 自带的demo 来查看运行结果。 ●在Virtual framebuffer 上运行: export QTDIR=$QTEDIR export PATH=$QTEDIR/bin:$PATH export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/examples/launcher qvfb -width 640 -height 480 & sleep 10 ./launcher -qws
出现 libpng error: Valid palette required for paletted images这个问题。
二 Qt/E 的交叉编译 要将我们写好的程序发布到开发板上,我们需要对Qt/Embedded 重新编译,与前面在宿主机上编译类似,步骤如下: 1. Build Qt/Embedded tar –xzvf qt-embedded-2.3.10-free.tar.gz mv qt-2.3.10 qt-2.3.10-target export TMAKEDIR=$PWD/tmake-1.13 export QT2DIR=$PWD/qt-2.3.2 export QTEDIR=$PWD/qt-2.3.10-target cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH make clean ./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32 make 出现 /public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new[](unsigned int)' /public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete(void*)' /public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `__cxa_pure_virtual' /public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete[](void*)' /public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new(unsigned int)' collect2: ld returned 1 exit status make[4]: *** [t1] 暂时不管它,不影响的。下面的第2步: “修改tmake 配置文件” 即可解决此类问题。
这步完成后,我们会在/$QTEDIR/lib/目录下面看到libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.10 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在开发板上跑的库。 file libqte.so.2.3.10 libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped 有了这个库以后我们就可以把它拷贝到我们的开发板中相应的库目录下面,这里我们选择了开发板上的/usr/lib 目录,将/$QTEDIR/lib/下的libqte.so*复制到/usr/lib 目录下。 首先要建立宿主机和开发板的通讯,假设本机的ip 地址为192.168.0.56 并且/root/share 为共享文件夹。 cp –arf /$QTEDIR/lib/libqte.so* /root/share 启动minicom mount –t nfs –o nolock 192.168.0.56:/root/share /mnt/nfs将文件复制到开发板上 cp –arf /mnt/nfs/libqte.so* /usr/lib 2. 修改tmake 配置文件 vi $ TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf 将其中“TMAKE_LINK= arm-linux-gcc” “TMAKE_LINK_SHLIB= arm-linux-gcc” 修改为:“TMAKE_LINK= arm-linux-g++” “TMAKE_LINK_SHLIB= arm-linux-g++” 3.生成可执行文件 这里我们采用了Qt/Embedded自带的一个demo,它在/$QTEDIR/examples/progressbar目录下,这个目录包括下面几个文件: main.cpp、Makefile.in 、progressbar.h 、 Makefile、progressbar.cpp、progressbar.pro,如果已经有了progressbar 的执行文件,可以使用make clean删除。 progen –t app.t –o progressbar.pro echo $TMAKEPATH 查看返回的结果的结尾字符是否是“……/qws/linux-arm-g++”,如果不是的话需要在命令行中重新设置TMAKEPATH export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g++ 此外还要使QTDIR指向Qt/Embedded 的安装路径,如: export QTDIR=$QTEDIR 或者直接指定路径 export QTDIR=……/qt-2.3.10-target 完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以使用tmake 工具来生成我们需要的makefile 文件,在命令行中输入如下命令: tmake –o makefile progressbar.pro make 如果没出现错误的话就可以在当前目录下找到progressbar这个可执行文件,它就是在我们开发板上的相应目录中运行“./progressbar -qws”就可以运行程序了。 注: 1).如果执行命令 [/mnt/nfs]./progressbar -qws ./progressbar: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or direy 我的解决办法是从编译器目录下查找,并拷贝到开发板/usr/lib/中 即拷贝/usr/local/arm/3.4.1/arm-linux/lib/libstdc++.so* 到开发板/usr/lib/中 2).[/mnt/nfs]./progressbar –qws ./progressbar: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such fy 方法同上 在板子上: [root@hjembed qt_bin]# ./progress -qws Cannot find font definition file /usr/local/qt-embedded/lib/fonts/fontdir - is ? [root@hjembed qt_bin]# ls hello progress [root@hjembed qt_bin]# ./hello -qws Cannot find font definition file /usr/local/qt-embedded/lib/fonts/fontdir - is ? 出现此问题, 解决办法: 在上面拷贝libqte*.so* 时顺带把fonts目录也一并考入。并设置环境变量。 [root@hjembed qt_bin]# export QTDIR=/usr/ [root@hjembed qt_bin]# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH [root@hjembed qt_bin]# export PATH=$QTDIR/qt_bin:$QTDIR/bin:$PATH [root@hjembed qt_bin]# echo $LD_LIBRARY_PATH /usr//lib:/lib:/usr/lib
在屏幕上看到了界面, 成功了。
三. 建立本机Qtopia 虚拟平台 软件:FC2 + minicom + Embeded Linux for 2410 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 将本次实验所需的四个文件拷贝到/public/qtopia 目录下,我们以下的实验都是在这个目录下进行的。
宿主机上建立虚拟的Qtopia 环境需要以下几个步骤: 1. 解压缩安装文件: tar jxvf qtopia-free-source-2.1.1.tar.bz2 mv qtopia-2.1.1 qtopia-2.1.1-target tar xzf tmake-1.13.tar.gz tar xzf qt-x11-2.3.2.tar.gz tar xzf qt-embedded-2.3.10-free.tar.gz mv qt-2.3.10 qt-2.3.10-target export QPEDIR=$PWD/qtopia-2.1.1-target export TMAKEDIR=$PWD/tmake-1.13 export QT2DIR=$PWD/qt-2.3.2 export QTEDIR=$PWD/qt-2.3.10-target 2. Build Qt/X11: cd $QT2DIR export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft make mkdir $QTEDIR/bin cp bin/uic $QTEDIR/bin/ 3. Build Qvfb: export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH:$TMAKEDIR/bin export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/tools/qvfb tmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/ 4.Build libqte: cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cp -f $QPEDIR/src/qt/qconfig-qpe.h src/tools/ ./configure -system-jpeg -no-xft -qconfig qpe -qvfb -depths 4,8,16,32 make sub-src 5.Build Qtopia: cd $QPEDIR export QTDIR=$QTEDIR export PATH=$QPEDIR/bin:$PATH export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH ./configure make 和前面编译Qt/Embedded 的基本步骤一样,还可以参考“./configure --help”,来进行选择。为了保证qvfb 能够正确显示qtopia 的结果,我们必须保证环境变量设置正确,我们可以通过“env”命令来检查下面的环境变量,也可以用下面的方法来检查。 echo $QPEDIR /root/qtopia/qtopia-free-2.1.1/ echo $QTDIR /root/qtopia/qt-2.3.10 echo $LD_LIBRARY_PATH /root/qtopia/qtopia-free-2.1.1/lib:/root/qtopia/qt-2.3.10/lib echo $PATH /root/qtopia/qt-2.3.10/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local /sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 出现上面的结果就可以正常的显示Virtual framebuffer,我们可以通过下面的命令在Virtual framebuffer 中实现Qtopia。 cd $QPEDIR/bin qvfb &
./qpe.sh
后记:
几个环境变量设置的脚本文件
qt程序: 安装目录在/public/qt
1:在 host 上用qvfb模拟开发环境, 此时编译程序需设置环境变量。 cd /public/qt source confighost.sh cat confighost.sh
export TMAKEDIR=$PWD/tmake-1.13 export QT2DIR=$PWD/qt-2.3.2 export QTEDIR=$PWD/qt-2.3.10-host
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export PATH=$QTEDIR/bin:$QT2DIR/bin:$PATH export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH export QTDIR=$QTEDIR
2: 当要交叉编译target 上的qt程序 时, 需设置环境变量。 cd /public/qt source configTarget.sh cat configTarget.sh
export TMAKEDIR=$PWD/tmake-1.13 export QT2DIR=$PWD/qt-2.3.2 export QTEDIR=$PWD/qt-2.3.10-target
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ export PATH=$QTEDIR/bin:$PATH export LD_LIBRARY_PATH=$QTEDIR/lib:$LD_LIBRARY_PATH
export QTDIR=$QTEDIR
qtopia 程序 安装目录在/public/qtopia 1: host 上模拟开发环境 ,需设置的环境变量 cd /public/qtopia source configHost.sh cat configHost.sh
export QTEDIR=$PWD/qt-2.3.10-target export QPEDIR=$PWD/qtopia-2.1.1-target export QT2DIR=$PWD/qt-2.3.2 export TMAKEDIR=$PWD/tmake-1.13 export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export QTDIR=$QTEDIR export PATH=$TMAKEDIR/bin:$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
2: Targe上, 还没有做。
|
|
|
发表于: 2007-01-21,修改于: 2007-01-26 11:23,已浏览5313次,有评论16条
推荐
投诉
|
|
 |
|
 |
|  |
|
 |
 |
|
 |
网友评论
 |
|
 |
 |
网友:
zixin
| 时间:2007-03-14 13:37:08 IP地址:58.19.126.★ |
|
|
|
你好!
在 二 Qt/E 的交叉编译中
1. Build Qt/Embedded
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
make
这一步执行完后就会出现
/bin/sh: line 1: arm-linux-g++: command not found
这个错误
而我已经下载了编译器: arm-linux-gcc-3.4.1.tar.bz2
生成的编译工具在目录/usr/local/arm/3.4.1/bin下,
修改/etc/profile,增加如下一行。
pathmunge /usr/local/arm/3.4.1/bin
并重启
可是还是会说/bin/sh: line 1: arm-linux-g++: command not found
不知道为什么~
希望向你请教一下!
不胜感激!
qq: 16117017
email: solo8425@gmail.com
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
zixin
| 时间:2007-03-14 22:13:47 IP地址:58.19.126.★ |
|
|
|
交叉编译 3.生成可执行文件中
用linux-arm-g++编译出了文件 可是minicom之后
在板子上:
[root@hjembed qt_bin]# ./progress -qws
progress文件是在host/qt-2.3.10-target的子文件夹中
扳子如何能够运行这个可执行文件progress讷?
如何在扳子上运行呢?
我总是报文件找不到
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
zixin
| 时间:2007-03-16 10:54:04 IP地址:58.19.126.★ |
|
|
|
你好!收到你的mail了~ 十分感谢已经解决了~~
请问一下
交叉编译 3.生成可执行文件中
在屏幕上看到了界面, 成功了。
这个屏幕指的是2410扳子上的屏幕么?
为什么我会报错:
[/mnt/yaffs/lib/progressbar]./progressbar -qws
Cannot create Qt/Embedded data directory: /tmp/qtembedded-0
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
todaygood
| 时间:2007-03-17 08:35:51 IP地址:218.104.96.★ |
|
|
|
1:我的屏幕指的是显示屏
2:说得很清楚阿 Cannot create Qt/Embedded data directory
你自己 mkdir /tmp/qtembedded-0 试试 。
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2007-04-02 16:56:48 IP地址:220.248.92.★ |
|
|
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2007-04-13 20:40:42 IP地址:222.67.144.★ |
|
|
|
您好
我在QT/Embedded成功交叉编译以后
对tmake 生成Makefile文件后,如下:
tmake –o makefile progressbar.pro
make
后编译出现错误
/usr/bin/ld: cannot find
-lqt”
还望兄弟赐教,谢谢了
junmin2005@gmail.com
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
mviolet
| 时间:2007-04-17 14:44:19 IP地址:59.79.83.★ |
|
|
|
请问一下,我也出现了楼上的错误
[/mnt/yaffs/lib/progressbar]./progressbar -qws
Cannot create Qt/Embedded data directory: /tmp/qtembedded-0
我试着 mkdir /tmp/qtembedded-0但是又报错:
mkdir:cannot create directory 'tmp':operation not permitted
有什么解决方法?
我的邮箱mviolet@126.com
多谢了阿
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
强烈鄙视楼主 | 时间:2007-04-26 16:40:42 IP地址:202.118.22.★ |
|
|
|
和前面编译Qt/Embedded 的基本步骤一样,还可以参考“./configure --help”,来进行选择。
请问要怎样选择,我的始终提示不支持jpeg需要支持jpeg,why?楼主???????????????????
我有点开始怀疑你是否做成功过?从你写的来看,你的抄袭很多!!!!!!!!
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
强烈鄙视楼主 | 时间:2007-04-26 16:40:43 IP地址:202.118.22.★ |
|
|
|
和前面编译Qt/Embedded 的基本步骤一样,还可以参考“./configure --help”,来进行选择。
请问要怎样选择,我的始终提示不支持jpeg需要支持jpeg,why?楼主???????????????????
我有点开始怀疑你是否做成功过?从你写的来看,你的抄袭很多!!!!!!!!
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
paraller
| 时间:2007-06-01 17:31:40 IP地址:218.20.133.★ |
|
|
|
请问在编译QTE的库时,添加了选项 -thread ,生成的QTE库是两个libqte-mt.so.2.3.10与libqte.so.2.3.10,还是只生成libqte.so.2.3.10?
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
honest581
| 时间:2007-06-08 21:54:39 IP地址:222.178.10.★ |
|
|
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2007-06-20 03:17:09 IP地址:166.111.66.★ |
|
|
|
3.生成可执行文件
make(直接用交叉编译器)
此后显示 编译信息
In function `_start':
: undefined reference to `main'
/qte/qte-target/qt-2.3.10/lib/libqte.so: undefined reference to `operator new[](unsigned int)'
/qte/qte-target/qt-2.3.10/lib/libqte.so: undefined reference to `operator delete(void*)'
/qte/qte-target/qt-2.3.10/lib/libqte.so: undefined reference to `__cxa_pure_virtual'
/qte/qte-target/qt-2.3.10/lib/libqte.so: undefined reference to `operator delete[](void*)'
/qte/qte-target/qt-2.3.10/lib/libqte.so: undefined reference to `operator new(unsigned int)'
这个问题应该如何解决,谢谢
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2007-06-20 03:24:03 IP地址:166.111.66.★ |
|
|
|
我的邮箱是chenzhi222@163.com,谢谢
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
snowyhm
| 时间:2007-11-08 11:46:29 IP地址:218.1.25.★ |
|
|
|
你好:
看到你这篇文章,写的不错!本来Linux+ARM开发就是在别人的基础上结合自己的应用进行修改,无所谓是不是完全原创的,上面有网友对你的质疑不要太在意。
看到你tmake.conf文件的修改后,让我解决了我现在安装QTE时老碰到的问题——以前也修改过,但忘了,当重新装机器时,老碰到有些库没有定义。呵呵,一上网就看到你的这个文章,忽然有感而发:)
有空去我的snowyhm.cublog.cn坐坐,多交流。
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2007-12-05 16:03:37 IP地址:222.90.213.★ |
|
|
|
我建议大家还是看看那个shell编程,看了会明白许多的
|
|
|
|
 |
|
 |
 |
|
 |
 |
网友:
本站网友 | 时间:2008-06-16 22:05:08 IP地址:125.120.227.★ |
|
|
|
|
|
|
 |
|
 |
|  |
|
 |
|