qt4.6.2移植

qt-everywhere-opensource-src-4.6.2.tar.gz 压缩包解压为 3 份,分别编译 PC ,嵌入式 x86 arm 三个版本。

我在 root 目录下建立 tmp 文件夹,将 qt-everywhere-opensource-src-4.6.2.tar.gz 直接解压后复制 2 分,分别命名为 pc x86 arm


1. 编译 PC 版:
进入 pc 目录
#./configure
# gmake
# gmake install
安装过程比较长,没有碰到过错误。

2. 编译嵌入式 x86 版:
进入 x86 目录
# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
# gmake
# gmake install
安装过程比较长,没有碰到过错误。

编译安装 PC 版中的 qvfb
进入 pc/tools/qvfb/ 目录
#make
编译完毕,将 pc/bin 目录下的 qvfb 文件复制到 /usr/local/Trolltech/QtEmbedded-4.6.2/bin 目录。

3. 编译嵌入式 arm 版(需要 arm-linux-gcc 的支持):
使用友善自带的 ARM-Linux GCC 4.3.2 编译完了,程序移植到开发板上后,出现 Segmentation Fault 错误,按原文,使用 4.1.2 正常。

直接将 arm920t-eabi.tgz 解压缩到根目 录,不可以像文章中说的那样“我把它放在: /usr/local/arm/4.1.2/ ”,最起码我放过去后出错了。
把编译器路径加入系统环境变量,运行命令:
#gedit /root/.bashrc
编辑 /root/.bashrc 文件,在最后一行加上 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

 


编译 tslib 对触摸屏支持:
下载, tslib1.4.tar.gz ,解压后:
# ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
# make
# make install
我下载的包解压后没有 configure 文件,需要运行 autogen.sh 后才能生成。

设置环境变量,以便编译时找到相关的库:
# export CPLUS_INCLUDE_PATH=/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++:/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++/arm-none-linux-gnueabi
# export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

修改 qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加 lts 参数):
QMAKE_CC                = arm-linux-gcc -lts
QMAKE_CXX               = arm-linux-g++ -lts
QMAKE_LINK              = arm-linux-g++ -lts
QMAKE_LINK_SHLIB        = arm-linux-g++ -lts
这一步必须有,不然肯定出错。

配置:
必须加上“ -prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm ” 参数, 不然安装后不在 QtEmbedded-4.6.2-arm 文件夹 下,而是覆盖了 QtEmbedded-4.6.2
# ./configure /
-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm /
-opensource /
-confirm-license /
-release -shared /
-embedded arm /
-xplatform qws/linux-arm-g++ /
-depths 16,18,24 /
-fast /
-optimized-qmake /
-pch /
-qt-sql-sqlite /
-qt-libjpeg /
-qt-zlib /
-qt-libpng /
-qt-freetype /
-little-endian -host-little-endian /
-no-qt3support /
-no-libtiff -no-libmng /
-no-opengl /
-no-mmx -no-sse -no-sse2 /
-no-3dnow /
-no-openssl /
-no-webkit /
-no-qvfb /
-no-phonon /
-no-nis /
-no-opengl /
-no-cups /
-no-glib /
-no-xcursor -no-xfixes -no-xrandr -no-xrender /
-no-separate-debug-info /
-nomake examples -nomake tools -nomake docs /
-qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib

上面划掉的蓝色内容,可以不要的,这样编辑也不会出错(虚拟机搞坏了,不得已重装,配置 参数时忘了干上面的工作了,结果发现没出错)。

关于配置参数,参照一下这篇文章吧,可以用configure -embedded –help查看。

http://www.cuteqt.com/blog/?p=582

如果你放弃配置,则使用命令: # gmake confclean

编译: # gmake

安装: # gmake install

安装完成后,在 /usr/local/Trolltech 目录 中有三个文件夹: Qt-4.6.2 QtEmbedded-4.6.2 QtEmbedded-4.6.2-arm

4 、移植
我是通过 NFS 启动的系统,具体操作可以参照友善的手册,在 http://www.arm9.net/download.asp 有下载,在第 5.5.3 节通过 NFS 启动系统。

Fedora12   /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的 所有文件复制到 /opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 目录中(对应目录复制,相当于复制到了开发板对应目录中),其实需要的时候可以裁剪,看原文吧。

Fedora12   /usr/local/tslib 中的库复制 到 /opt/FriendlyARM/mini2440/root_qtopia/usr/local 中。即将 /usr/local/tslib 下的所有文件复制到 /opt/FriendlyARM/mini2440/root_qtopia/usr/local 文件夹下。

如果运行时还缺少其他的库,复制方法相同。也可以使用 arm-angstrom-linux-gnueabi-readelf -a 程序名 | grep "Share" ,命令查看需要哪些共享库,一起复制过去。

为支持触摸屏,开机自动设置环境变量,在 2440 /etc/profile 中追加:
export LD_LIBRARY_PATH=/usr/local/lib:$QTDIR/lib:$LD_LIBRARY_PATH                                                  
export TSLIB_ROOT=/usr/local/lib    
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_FBDEVICE=/dev/fb0 
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

取消 /usr/local/etc/ts.conf 中 的第一个注释:
# module_raw input (去掉 # ,并且该行顶格)
我编辑时没有“ #

启动 Micro2440 运行 /usr/local/bin/ts_calibrate 校正触摸屏。

到此 Qt4.6.2 的移植暂告一段落,移植还没有完,此时如果在开发板上运行 Qt4.6.2-arm 编译的程序,则会出现“ relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference ”错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值