分类:
2006-06-30 14:31:14
如何创建Qt/Embedded开发环境 | |
FriendlyARM | |
本文适用于友善之臂基于S3C2410X的任何一种目标板 | |
注意:为了保证您能够正确执行本文的步骤,请务必按照“ ”一文正确安装您的Redhat 9.0系统 | |
| |
| |
1. 解压源代码,配置Qt库的路径 | |
把光盘放入DVD-ROM,执行以下步骤: | |
Step1 挂接光盘 #mount /dev/cdrom /mnt/cdrom Step2 进入Qt 开发包目录 #cd /mnt/cdrom/SBC-2410X-Linux/EmGUI Step3 安装X86 版本的Qt 和Qtopia 源代码 #tar xvzf x86-qtopia.tgz –C /friendly-arm #该步将在/friendly-arm下生成x86-qtopia目录 Step4 安装SBC-2410X 版本的Qtopia 源代码 #tar xvzf arm-qtopia.tgz –C /friendly-arm #该步将在/friendly-arm目录下生成arm-qtopia目录 Step5 弹出光盘 #cd / #eject | |
为了在PC上模拟运行Qtopia,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf文件以适应刚刚安装的Qt(Redhat安装时带有Qt库,但不适合我们最新安装的版本),修改后的ld.so.conf文件内容如下: /friendly-arm/x86-qtopia/qt/lib /friendly-arm/x86-qtopia/qtopia/lib /usr/kerberos/lib /usr/X11R6/lib /usr/lib/sane /usr/lib/mysql | |
| |
2. 使用build脚本编译Qt/Embedded | |
(1)编译Qt/Embedded for X86 | |
#cd /friendly-arm/x86-qtopia #./build (该过程比较长,需要运行大概30分钟左右) #ldconfig | |
注:运行ldconfig是为了使生成的qt和qtopia库有效,运行一次即可。 | |
(2) 在PC上模拟运行Qtopia | |
#qvfb& | |
#qtopia | |
| |
3. Hello,SBC-2410X for X86 | |
(1)编译Hello, SBC-2410X | |
#cd /friendly-arm/x86-qtopia #. set-env ;注意,中间有个空格,必须要有才能执行有效! #cd hello #make | |
将在/friendly-arm/x86-qtopia/qtopia/bin目录下生成hello可执行文件 | |
(2)单独运行Hello, SBC-2410X | |
#qvfb -width 640 -height 480 & | |
#hello -qws | |
如图 | |
在qvfb中单独运行Hello, SBC-2410X | |
(3)在Qtopia中运行Hello, SBC-2410X | |
#qvfb -width 640 -height 480 & | |
#qpe | |
如图 | |
在qtopia中的Hello, SBC-2410X | |
| |
4. Hello,SBC-2410X for ARM | |
(1)编译Qt/Embedded for ARM | |
#cd /friendly-arm/arm-qtopia #./build (该过程比较长,需要运行大概30分钟左右) | |
(2)编译Hello, SBC-2410X for ARM | |
#cd hello #make | |
编译完毕,hello将生成存在/friendly-arm/arm-qtopia/qtopia/bin目录下 | |
(3)把hello下载到目标板 | |
将可执行文件移动到 SBC-2410X 目前主要有两种方式: | |
第一种方法:复制到介质(下面以优盘为例) | |
#mount /dev/sda1 /mnt #cp hello /mnt #umount /mnt 把优盘拔下来插入到 SBC-2410X 的 USB HOST 端口,按照以下命令操作: #mount /dev/sda1 /mnt ;挂接优盘 #cp /mnt/hello /opt/qtopia/bin ;把 hello 复制到/opt/qtopia/bin目录 | |
第二种方法: 通过网络移动(推荐使用) | |
通过网络下载程序的主要步骤是:先把 hello 复制到 ftp 共享目录,然后在 SBC-2410X 上使用 ftp 下载,并修改执行权限运行,如下: 在 PC 端执行: #cp hello /home/ftp ;把 hello 复制到 ftp 共享目录 在SBC-2410X 端执行: #cd /opt/qtopia/bin ;进入bin目录 #ftp 192.168.0.1 ;登录ftp服务器 >get hello ;下载 hello >bye ;退出 ftp 登录 #chmod a+x hello ;改变 hello 的可执行权限 | |
(4)在目标板上单独运行hello | |
export set HOME=/root export set QTDIR=/opt/qt export set QPEDIR=/opt/qtopia export set QWS_KEYBOARD="USB:/dev/input/event1" export set QWS_MOUSE_PROTO="USB:/dev/input/mouse0" export set PATH=$QPEDIR/bin:$PATH export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib $QPEDIR/bin/hello -qws | |
(5)在Qtopia中运行hello | |
export set HOME=/root export set QTDIR=/opt/qt export set QPEDIR=/opt/qtopia export set QWS_KEYBOARD="USB:/dev/input/event1" export set QWS_MOUSE_PROTO="USB:/dev/input/mouse0" export set PATH=$QPEDIR/bin:$PATH export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib $QPEDIR/bin/qpe > /dev/null 2>/dev/null | |
| |
5. 常见的编译错误 | |
(1) 执行build时出现的错误 | |
./build 很长时间后,最后显示如下 Makefiles will be regenerated. ................................................................................. QPE is now configured for building. Just run "make". To reconfigure, run make clean and configure. make -C libraries/qtopia make[1]: Entering directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia' make[1]: Nothing to be done for `default'. make[1]: Leaving directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia' make -C 3rdparty/libraries/freetype make[1]: Entering directory `/friendly-arm/x86-qtopia/qtopia/src/3rdparty/libraries/freetype' make[1]: Nothing to be done for `default'. make[1]: Leaving directory `/friendly-arm/x86-qtopia/qtopia/src/3rdparty/libraries/freetype' make -C libraries/qtopia1 make[1]: Entering directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia1' g++ -c -I/friendly-arm/x86-qtopia/qtopia/include -I/friendly-arm/x86-qtopia/qt/include -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W -DNO_DEBUG -fPIC -DQTOPIA_APP_INTERFACE -I.moc/linux-generic-g++/ -I/friendly-arm/x86-qtopia/qtopia/src/server -o .obj/linux-generic-g++//global1.o global1.cpp global1.cpp:39:23: uuid/uuid.h: 没有那个文件或目录 global1.cpp: In static member function `static QUuid Global::generateUuid()': global1.cpp:188: `::uuid_generate' undeclared (first use here) make[1]: *** [.obj/linux-generic-g++//global1.o] Error 1 make[1]: Leaving directory `/friendly-arm/x86-qtopia/qtopia/src/libraries/qtopia1' make: *** [libraries/qtopia1] Error 2 | |
这是因为你没有正确安装Redhat 9.0所致,请参考 “ ”一文正确安装您的Redhat 9.0系统 | |
(2) 编译hello时出现的错误 | |
信息如下: | |
/usr/lib/qt-3.1/bin/uic hello_base.ui -o ./hello_base.h g++ -c -I/include -I/usr/lib/qt-3.1/include -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W -DNO_DEBUG -DQTOPIA_APP_INTERFACE -I.moc/linux-generic-g++/ -o .obj/linux-generic-g++//hello.o hello.cpp g++ -c -I/include -I/usr/lib/qt-3.1/include -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W -DNO_DEBUG -DQTOPIA_APP_INTERFACE -I.moc/linux-generic-g++/ -o .obj/linux-generic-g++//main.o main.cpp main.cpp:2:35: qtopia/qpeapplication.h: No such file or directory main.cpp: In function `int main(int, char**)': main.cpp:6: `QPEApplication' undeclared (first use this function) main.cpp:6: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:6: parse error before `(' token main.cpp:9: `a' undeclared (first use this function) main.cpp:5: warning: unused parameter `int argc' main.cpp:5: warning: unused parameter `char**argv' make: *** [.obj/linux-generic-g++//main.o] Error 1 | |
从错误信息中可以看出,编译hello的时候这里用的是-I/include头文件目录,这个目录是不正确的,导致这样的原因是:您没有在build完之后运行ldconfig命令! | |
(3) 编译hello时出现的第二种错误 | |
错误信息如下: | |
[root@localhost hello]# make /usr/lib/qt-3.1/bin/uic hello_base.ui -o ./hello_base.h /usr/lib/qt-3.1/bin/uic: error while loading shared libraries: libqt-mt.so.3: cannot open shared object file: No such file or directory make: *** [hello_base.h] Error 127 | |
从错误信息中可见,您的x86-qtopia环境并没有搭建好,亦然使用redhat9.0自带的环境。解决办法如下: | |
第一种办法:请务必在同一个窗口执行以上步骤。运行build脚本时,已经包含了环境的创建,您不能离开build运行后所在的窗口环境来编译hello | |
第二种办法:自己创建重新创建环境。即使用/friendly-arm/x86-qtopia/set-env脚本。运行时请务必使用“. set-env ”,注意中间有个空格 | |
,同样,您不能离开set-env运行后所在的窗口环境来编译hello |