编译PC上的QT到编译ARM上的QT的过程

上传人:lis****210 文档编号:180631560 上传时间:2023-01-07 格式:DOCX 页数:6 大小:20.21KB
返回 下载 相关 举报
编译PC上的QT到编译ARM上的QT的过程_第1页
第1页 / 共6页
编译PC上的QT到编译ARM上的QT的过程_第2页
第2页 / 共6页
编译PC上的QT到编译ARM上的QT的过程_第3页
第3页 / 共6页
点击查看更多>>
资源描述
一)编译 PC 上的 qpe今天我给大家分享一下我自己从编译PC上的QT到编译ARM上的QT (交叉编译QPE)的过 程,虽然QT不是自己的全部,但是毕竟在这半个月的环境搭建实验时间里,受到无数的打 击,无所的失败,在QT中文网内朋友的鼓舞下,也慢慢成长起来,最后才搭建完成,所以 我们开始吧!首先说说编译PC上的QT/E,我起初的时候不知道编译PC上的QT/E编译qpe和交叉编译后 的qpe有什么不同,后来才发现的确有不同点:PC上的QT/E的qpe环境编译成功以后输入: #qvfb 弹出了虚拟帧缓冲器,然后我们再打开一个终端,输入:#qpe在返回上一个终端,发现qpe的图形界面在虚拟帧缓冲的那个黑色框架中显示出来 而交叉编译 qpe 以后,输入#qvfb 弹出虚拟帧缓冲器以后,然后再打开一个终端,输入:#qpe 系统出现错误: cannot execute binary file 说明不支持这样的二进制文件格式总结得出pc编译QT/E以后qpe是i386的,可以直接在PC机器上运行,交叉编译后的qpe 是ARM的,只有挂接了板子后才可以运行(大家可以找到qpe,然后用file命令检测),具 体操作如下:#locate qpe | more找到qpe位置,找到后转到它所在的目录,然后#file qpe这样就可以看它(qpe)所支持的处理器格式了.下面我们来一步步分析我的编译过程,硬件就不用说了:内存256MB,主频1.6GHZ,因为我是学写驱动的所以裸装RedHat9.0(2.4.20-8)交叉编译工具是2.95.3的,我把它放到了/usr/local/arm/目录中,然后在/etc/profile中配置了 它的路径注意:大多数厂家都提供了编译QT/E和Qtopia的脚本,我建议自己跟着他们提供的脚本一 步一步的做,这样以来错了也知道是在哪一步出问题。首先在创建目录/yehuo2410/qt_x86用于编译QT/E商家提供以下编译资料:tmake-1.11.tar.gz , qt-embede-2.3.7.tar.gz,qt-x11-2.3.2.tar.gz, qt-free-1.7.tar.gz,这些对编译 PC 上的 QT/E 的 qpe 足够了,不过在交叉编译 qpe 的时候,还差两份资料: e2fsprogs.1.35.tar.gz, jpegsrc.v6b.tar.gz必须要)现在开始脚本分析了:#cd /yehuo2410 (野火2410是我自己取的,不局限于任何厂家ARM开发板)#tar xzvf +各个压缩包,解压到/yehuo2410以下建立通用的目录#mv tmake-11 tmake#mv qt-2.3.7.tar.gz qt#mv qt-2.3.2.tar.gz qt-x11#mv qt-free-1.7.tar.gz qtopia#cd qt-x11 转到这个目录开始编译相应的工具#export QTDIR=$PWD 配置当前 QTDIR#echo yes | ./configure -static -ro-xft -no-opengl -no-sm 形成 Makefile 文件#make -C src/moc编译形成moc (元对象编译器)工具#cp src/moc/moc bin 拷贝上一步生成的 moc 到当前目录的 bin#make -C src 这一步是必须的以下两步形成设计器 designer 和虚拟帧缓冲器 qvfb#make -C tools/designer这时候designer工具不会在tools/designer下形成,而是在当前目录(qt-x11的bin目录)下形 成,故不用拷贝,你会发现qt-x11/bin下多了 uic,和designer工具,uic首先形成,因为designer 在编译是要用到uic工具,uic工具是qt中用来处理.ui文件的工具。#make -C tools/qvfb#cp tools/qvfb bin#strip bin/uic bin/moc bin/designer bin/qvfb 是对各个工具可执行文件进行节优化#cp /bin/* ./qt/bin 拷贝这些工具到qt-x11的兄弟目录qt中的bin目录中,qt/bin中有三 个文件:findtr,qt20fix, qtrename140,而qt-x11/bin中也有,拷贝的时候系统问题是否覆盖(qt-x11/bin里 的这三个文件是否覆盖qt/bin里的这三个文件?),我选择是。# cd .下面开始配置环境变量,很多脚本都这样写#export QTDIR=$PWD/qt#export QTEDIR=$QTDIR#export QPEDIR=$PWD/qtopia#export TMAKEDIR=$PWD/tmake#export TMAKEPATH=$TMAKEDIR/llib/qws/linux-generic-g+ (常规 g+编译器)这是和交叉编 译qpe的一处不同,qws目录中有很多包括手机,PDA和ARM之类的g+编译器。#export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH#export LD_LIBRARY_PATH=$QTDIR/lib: $LD_LIBRARY_PATH 配置了这里就不用配置 /etc./ld.so.conf 文件了。上述配置固然好,不过这样只是针对当前终端有效,如果再打开一个新终端,那么这些变量 在新终端中不会生效,保险的方法是:在/etc/profile目录里把这些配置信息输入到profile 的末尾,不过不能用$PWD 了要把所有$PWD字样改成/yehuo2410/qt_x86,注销系统,重新 登陆后,环境变量生效(有个立即生效的方法我忘记了)。如果这里没有配置好,那么在编译的时候可能出现 tmake 版本过低,然后系统要求起码要 1.11 版本的tmake,这是因为我们选择了全部安装Linux操作系统,系统本来有个1.7版本的tmake,在没 有配置TMAKEDIR和TMAKEPATH的时候系统自动使用自己1.7版本的tmake,所以出错。#cd qt#make clean 这里似乎没有必要,不过建议执行一下#make -C src注意:-C选项是指在编译是先转到src目录(不能自己直接转到在src目录make 哦,因为我试过了,结果是失败)#cd .#cd qtopia/src开始编译在PC上可以执行的qpe 了#./configure -platform linux-generic-g+#make大约半个小时就可以编译完成 完成后打开任意一个终端,输入#qvfb & 打开另外新终端,输入#qpe &切换到老终端,就可以看到qpe在虚拟缓冲器qvfb上运行的界面,代表你编译PC上的qpe 成功了有时候出现 cont fine dev/fb0只要在/etc/prioile文件中,输入export QWS_DLS_DISPLAY=QVFb:0 注销一次(有个可以立即生效的方法,我忘记了),就可以了 编译的过程大概就是这样,这已经是最简单的过程,在Qtopia的编译中会遇到更复杂,更 繁琐的问题。(二)交叉编译 qpe现在我们开始交叉编译qpe吧,不过要做好心理准备,因为整个过程将会遇到各种各样的问 题,失败是很平常的,关键是我们要挺过来,坚持和摸索是我们每一个计算机工作者的法宝, 让我们开始吧,和PC上不同的地方我会用红色显示出来!首先我们要准备编译资料,商家提供以下编译资料:tmake-1.11.tar.gz , qt-embede-2.3.7.tar.gz,qt-x11-2.3.2.tar.gz, qt-free-1.7.tar.gz,这些对编译 PC 上的 QT/E 的 qpe 足够了,不过在交叉编译 qpe 的时候,还差两份资料: e2fsprogs.1.35.tar.gz, jpegsrc.v6b.tar.gz所以必须去网站上下载,也可以向别人索要。 同样我在/yehuo2410/下建立目录qt_arm作为交叉编译目录好!我们开始分析脚本:#cd /yehuo2410/qt_arm (拷贝上述所有压缩包到该目 录包括 e2fsprogs-1.35.tar.gz 和 jpegsrc.v6b.tar.gz 两个压缩包)当前目录为 /yehuo2410/qt_arm#tar xzvf +各个压缩包,解压到/yehuo2410/qt_arm,记得要解压e2.和jpegsrc.两个包哦#mv tmake-11 tmake#mv qt-2.3.7.tar.gz qt#mv qt-2.3.2.tar.gz qt-x11#mv qt-free-1.7.tar.gz qtopia#cd qt-x11 转到这个目录开始编译相应的工具#export QTDIR=$PWD 配置当前 QTDIR#echo yes | ./configure -static -ro-xft -no-opengl -no-sm 形成 Makefile 文件#make -C src/moc编译形成moc (元对象编译器)工具#cp src/moc/moc bin 拷贝上一步生成的 moc 到当前目录的 bin#make -C src 这一步是必须的以下两步形成设计器 designer 和虚拟帧缓冲器 qvfb#make -C tools/designer这时候designer工具不会在tools/designer下形成,而是在当前目录(qt-x11的bin目录)下形 成,故不用拷贝,你会发现qt-x11/bin下多了 uic,和designer工具,uic首先形成,因为designer 在编译是要用到uic工具,uic工具是qt中用来处理.ui文件的工具。#make -C tools/qvfb#cp tools/qvfb bin#strip bin/uic bin/moc bin/designer bin/qvfb 是对各个工具可执行文件进行节优化#cp/bin/* ./qt/bin 拷贝这些工具到qt-x11的兄弟目录qt中的bin目录中,qt/bin中有三 个文件:findtr,qt20fix, qtrename140,而qt-x11/bin中也有,拷贝的时候系统问题是否覆盖(qt-x11/bin里 的这三个文件是否覆盖qt/bin里的这三个文件?),我选择是。# cd .下面开始配置环境变量,很多脚本都这样写#export QTDIR=$PWD/qt#export QTEDIR=$QTDIR#export QPEDIR=$PWD/qtopia#export TMAKEDIR=$PWD/tmake#export TMAKEPATH=$TMAKEDIR/llib/qws/linux-arm-g+ (常规 g+编译器)这点就和 PC 上的 不同了,qws目录中有很多包括手机,PDA和ARM之类的g+编译器。#export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH#export LD_LIBRARY_PATH=$QTDIR/lib: $LD_LIBRARY_PATH 配置了这里就不用配置 /etc./ld.so.conf 文件了,同样,为了保险,我把上述信息写到了 /etc/profile 文件中并且在 /etc/profile中的$PWD替换为/yehuo2410/qt_arm,我们不用担心以前编译的PC版本的qpe会 受到影响,当我们真正要用到PC版本的qpe的时把/etc/profile里面的这一部分涉及的 /yehuo2410/qt_arm字符修改成/yehuo2410/qt_x86字符就可以了,当然,设置完成以后注销 系统以生效。#cd .#cd qt#make clean再次强调以下步骤是必要的,否则会出现cannot fine -lqte问题#cp $QPEDIR/src/qt/qconfig-qpe.h src/tools在下一步中我发现编译PC上的qpe时做到这一步时,会问你两次(都回答yes),而这里只 会问一次,当时我感到费解,因为和厂家提供的脚本不一样(厂商提供的脚本是echo yes;echo no) ,我担心是哪里出错了,但是我依然往下做,直到最后也没有出现这里的相关问题,所 以就不用担心#echo yes|./configure -platform linux-arm-g+ -qconfig qpe -qvfb -depths 16,24,32#make -C src上面没有问题的话那么我们开始准备编译qtopia目录内的东西啦!#cd .如果你这样做:cd qtopia/src./configure -platform linux-arm-g+make那么会出现这样的错误:cannot find -lqtopia以及uuid.h找不到的问题这是因为我们发现qtopia/lib中libuuid.so打头的相关连接文件是一个错误文件连接,因为找 不到最终被链接的那个libuuid.so.6(具体名字我忘记了),所以矛盾转换为寻求新的libuuid.so 打头系列的文件的问题,这个时候你得开始编译e2fsprogs 了,只有通过编译才能形成新的 libuuid.so 打头系列的文件。以下是具体编译方法:当前目录为 /yehuo2410/qt_arm#tar -xzvf e2fsprogs.1.35.tar.gz#cd e2fsprogs-1.35#./configure -host=arm-linux-with-cc=arm-linux-gcc-with-linker=arm-linux-ld-enable-eld-shlibs-prefix=/usr/local/arm/2.95.3/arm-linux注意:这里prefix选项很重要,必须指定交叉编译工具2.95.3中的arm-linux,不要改成别的 目录或者不指定 prefix 选项,#make#make install lib/uuid 安装到该目录有个帖子上是这样写的:#tar xzf e2fsprogs-1.35.tar.gz#cd e2fsprogs-1.35#./configure -host=arm-linux -with-cc=arm-linux-gcc -with-linker=arm-linux-ld -enable-elf-shlibs -prefix=/usr/local/arm/2.95.3/arm-linux#make #make install lib/uuid/将 e2fsprogs-1.35/lib/目录下 uuid 的文件夹复制到/armsys2410/qt_arm/qtopia/include下 将 e2fsprogs-1.35/lib/ 中 的 libuuid.a libuuid.so libuuid.so.1 libuuid.so.1.2 复 制 到 /armsys2410/qt_arm/qtopia/lib 下可是在/e2fsprogs-1.35/lib目录里我们想要的四个文件中只有libuuid.a文件存在,而根本就找 不到libuuid.so libuuid.so.1(只有一个点号)以及libuuid.so.1.2,这个时候我发现 /usr/local/arm/2.95.3/arm-linux/lib 中生成了 libuuid.so,libuuid.so.1,libuuid.so.1.2,后来我用 file 命令查看libuuid.so.1.2所属处理器类型是ARM。所以得到了这三个文件,那天下午我的Linux 文件系统崩溃了,所以一切都要重来,当我又做到这一步时,编译 e2fsprogs 以后发现 e2fsprogs-1.35/lib 目 录中和 usr/local/arm/2.95.3/arm-linux/lib 中都生成了 libuuid.so, libuuid.so.1以及libuuid.so.1.2文件,而且都是支持ARM处理器的。总结得:如果在 e2fsprogs-1.35/lib 中找不到 libuuid.so,libuuid.so.1,libuuid.so.1.2 三个文件,那 么建议去看一下usr/local/arm/2.95.3/arm-linux/lib目录中是否存在这三个文件,如果不存在 那就重新解压e2fsprogs-1.35.tar.gz重来。将 e2fsprogs-1.35/lib/目录下 uuid 的文件夹复制到/armsys2410/qt_arm/qtopia/include下将 我 们 找 到 的 libuuid.a libuuid.solibuuid.so.1libuuid.so.1.2 复 制 到/yehuo2410/qt_arm/qtopia/lib 下好!问题解决了。如果你这样做:cd qtopia/src./configure -platform linux-arm-g+make那么会出现以下错误:./usr/local/arm/2.95.3/arm-linux/bin/ld: cannot find -ljpeg这是因为在qt目录内编译是configure文件默认配置为支持jpeg,然后在最后编译的时候找不 到相关的链接库.这个时候我们需要压缩包jpegsrc.v6b.tar.gz来解决这个问题,按照帖子上 的操作:下载jpegsrc.v6b.tar.gz到qtarm目录并解压,进入目录jpeg-6b:./configure -enable-sharedmake (得到 libtools 程序)./configure -enable-shared修改生成的 Makefile 文件:prefix = /qtarm/qt (qte 的路径)CC =/usr/local/arm/2.95.3/bin/arm-linux-gccAR =/usr/local/arm/2.95.3/bin/arm-linux-ar rcAR2=/usr/local/arm/2.95.3/bin/arm-linux-ranlibcp jconfig.doc jconfig.hmkdir -p /qtarm/qt/man/man1make生成的 libjpeg.so 在.libs 下,将 libjpeg.so 拷贝到/usr/local/arm/2.95.3/bin/arm-linux/lib我在jpeg-6b目录内使用ls命令找不到找不到libs目录(我忽略了点号),所以我按照惯例的方 法#locate libjpeg.so发现/usr/lib目录下有一 libjpeg.so打头系列文件,我当时很怀疑那不是我 想要的文件,所以我在另外一台PC上再一次按照同样的方法安装Linux,发现刚安好的系统 中/usr/lib中已经存在了这些文件,为了进一步证明它们不是我想要的libjpeg.so系列文件, 我用file命令查看libjpeg.so.62.00发现是i386处理器的,所以我放弃了使用它们,无意间我 在jpeg-6b/目录下使用了以下命令:#cd .libs #ls -l | grep libjpeg*刚好发现了它们:libjpeg.so-libjpeg.so.62libjpeg.so.62-libjpeg.so.62.0.0libjpeg.la-./libjpeg.la我用file命令查看这个链接库libjpeg.so.62.0.0发现是支持ARM处理器的,总结得:我没找到.libs目录在哪里,错误的以为是/lib和/usr/lib还有就是上述帖子最后一步:生成的 libjpeg.so 在.libs 下,将 libjpeg.so 拷贝到/usr/local/arm/2.95.3/bin/arm-linux/lib下. 应该是:将/jpeg-6b/.libs 目录下的 libjpeg.la, libjpeg.so , libjpeg.so.62 以及 libjpeg.so.62.0.0 拷贝到目 录/usr/local/arm/2.95.3/arm-linux/lib (没有 bin)好!这个问题解决了,再来:cd qtopia/src./configure -platform linux-arm-g+make应该就可以了,你通过了吗?,不要怕,再来,再来一定会编译通过的。本文来自:DZ3W.COM 原文网址:
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!