参考:
http://www.arm9home.net/read.php?tid-5161.html
http://www.arm9home.net/read.php?tid-5182.html
http://blog.sina.com.cn/s/blog_6541e78f0100ihoy.html?retcode=0
http://blog.sina.com.cn/s/blog_6541e78f0100ihp3.html?retcode=0
http://hi.baidu.com/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html
http://hi.baidu.com/清水小流/blog/item/9b9ac64bb8b4aaf383025ce0.html
http://blog.ednchina.com/gurongjiang/352778/Message.aspx
(一)编译QT前,安装相应的库文件
sudo apt-get install libx11-dev
sudo apt-get install libgtkglextmm-x11-dev
sudo apt-get install libghc6-x11-dev
sudo apt-get install libgl1-mesa-swx11-dev
sudo apt-get install xorg-dev
(二)下载准备
QT版本下载地址:http://qt.nokia.com/downloads-cn
(1)qt-creator-linux-x86-opensource-1.3.1.bin
http://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-32-bit
(2)qt-everywhere-opensource-src-4.6.2.tar.gz
http://qt.nokia.com/downloads/embedded-linux-cpp
(3)arm-linux-gcc-4.1.2
http://qtextended.org/downloads/toolchains/arm920t-eabi.tgz
把下载的文件放在/opt/FriendlyARM/mini2440, 然后执行
sudo tar xvzf qt-everywhere-opensource-src-4.6.3.tar.gz
并把解压所得的文件复制为三份, 分别命名为qt-x86-4.6.3, qt-x86e-4.6.3, qt-arm-4.6.3,, 分别对应PC, 嵌入式x86, 嵌入式arm平台.
(三)开始编译
(1) 编译 PC 版:
cd /opt/FriendlyARM/mini2440/qt-x86-4.6.3
#./configure
# make
# make install
此过程耗时较长
pc平台的还需要一个qvfb模拟器, 编译过程如下:
cd /opt/FriendlyARM/mini2440/qt-x86-4.6.3/tools/qvfb/
#make
编译完毕,将qt-x86-4.6.3/bin目录下的qvfb文件复制到/usr/local/Trolltech/QtEmbedded-4.6.2/bin目录。
并把这个bin目录添加path: sudu gedit /root/.bashrc
(2) 编译嵌入式x86版:
cd /opt/FriendlyARM/mini2440/qt-x86e-4.6.3
# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
# make
# make install
此过程耗时较长
(3)编译嵌入式arm版(需要 arm-linux-gcc ,而不是以上两个用的gcc 4.4.1):
和上面的编译过程稍有不同,一是需要安装arm-linux-gcc 4.1.2, 二是需要安装tslib。
(3-a)安装arm-linux-gcc 4.1.2
据说使用友善自带的ARM-Linux GCC 4.3.2编译的程序移植到开发板上后,出现Segmentation Fault错误,so~ 改用ARM-Linux GCC 4.1.2。
直接将arm920t-eabi.tgz放在根目录解压:sudo tar xvzf arm920t-eabi.tgz
把编译器路径加入系统环境变量,运行命令:gedit /root/.bashrc
编辑/root/.bashrc文件,在最后一行加上 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH
(3-b)安装tslib
这里还有一段插曲, 首先tslib1.4.tar.gz这个玩意不好找, 后来在csdn上下花四个大分下载了一个包, 第二, 里面的autogen.sh脚本, 需要"autotools", 即autoconf, automake, libtool, 安装这三个玩意耗费了我将近两个钟头,,,
编译tslib对触摸屏支持:
下载 tslib1.4.tar.gz,仍然放在/opt/FriendlyARM/mini2440/, 解压后进入目录,如果该目录下没有configure文件,先执行autogen.sh脚本生成。
# ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
# make
# make install
设置环境变量,以便编译时找到相关的库:
# 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
上面绿色的两步,似乎可以省略。
(3-c) 执行configure, 生成Makefile文件, 参数较长,,,,,可以根据自己需要裁减Qt:
./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
注意:红色的是触摸屏支持的配置。
-I/opt/tslib-install /include 编译好的头文件路径
-L/opt/tslib-install /lib 编译好的库文件路径
前几步中编译tslib个过程中, 生成了上面的目录和文件.
ps: 关于配置参数,参照http://www.cuteqt.com/blog/?p=582,或者用configure -embedded –help查看。
然后make, make install,,,,,,,,,,,,,,,,,
安装完成后,在 /usr/local/Trolltech 目录中有三个文件夹:Qt-4.6.2、QtEmbedded-4.6.2、QtEmbedded-4.6.2-arm。
(四)移植 ,,,这一步还没有做,基本是照抄过来的
通过NFS启动的mini2440,具体操作可以参照friendlyarm2010版的手册第5.5.3。
将Ubuntu9.10的 /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目录中,这个库的大小是可以剪裁的,
将Ubuntu9.10上 /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”错误。