ls注意:在搭建环境之前,首先要将tslib移植成功。安装过程参考我的博客“Qt学习一”
在该文件夹下创建一个新的文件(也可以随便选一个文件夹创建,我只是为了方便管理)
mkdir fl2440/3rdparty/qt_install
下载qt安装包(我这里是5.6.1版本的):
cd fl240/3drdparty/
wget http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.6/5.6.1/single/qt-everywhere-opensource-src-5.6.1.tar.xz
解压:
tar -xf qt-everywhere-opensource-src-5.6.1.tar.xz
cd fl240/3drdparty/
tar -xzf qt-everywhere-opensource-src-5.6.1.tar.gz
解压后进入源文件,创建shell脚本
#!/bin/bash
./configure -prefix /home/123/fl2440/3rdparty/qt_install \
-opensource \
-confirm-license \
-release \
-shared \
-strip \
-no-c++11 \
-xplatform linux-arm-gnueabi-g++ \
-no-opengl \
-qt-freetype \
-no-avx \
-make libs \
-optimized-qmake \
-qt-zlib \
-no-gif \
-qt-libpng \
-qt-libjpeg \
-no-openssl \
-no-cups \
-no-dbus \
-linuxfb \
-pch \
-qt-sql-sqlite \
-no-sse2 \
-no-sse3 \
-no-ssse3 \
-no-sse4.1 \
-no-sse4.2 \
-no-rpath \
-no-glib \
-qreal float \
-no-xcb \
-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-separate-debug-info \
-nomake tools \
-nomake examples \
-I /usr/local/tslib/include \
//添加tslib的库,如果不用触摸屏的话,可以不加。
-L /usr/local/tslib/lib
// -no-tslib
make -j4 && make install //这里的j4是你的处理器是几核的,我的虚拟机我设置的是4核,这样编译会快一点
这里的脚本是选择安装qt的一些应用,和不安装的一些应用
修改下面一个文件
vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabi-gcc
QMAKE_CXX = arm-linux-gnueabi-g++
QMAKE_LINK = arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy
QMAKE_NM = arm-linux-gnueabi-nm -P
QMAKE_STRIP = arm-linux-gnueabi-strip
load(qt_config)
添加以下内容:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
QMAKE_INCDIR = /usr/local/tslib/include
QMAKE_LIBDIR = /usr/local/tslib/lib
# modifications to g++.conf
QMAKE_CC = /opt/xtools/arm920t/bin/arm-linux-gcc -lts
QMAKE_CXX = /opt/xtools/arm920t/bin/arm-linux-g++ -lts
QMAKE_LINK = /opt/xtools/arm920t/bin/arm-linux-g++ -lts
QMAKE_LINK_SHLIB = /opt/xtools/arm920t/bin/arm-linux-g++ -lts
# modifications to linux.conf
QMAKE_AR = /opt/xtools/arm920t/bin/arm-linux-ar cqs
QMAKE_OBJCOPY = /opt/xtools/arm920t/bin/arm-linux-ar-objcopy
QMAKE_NM = /opt/xtools/arm920t/bin/arm-linux-nm -P
QMAKE_STRIP = /opt/xtools/arm920t/bin/arm-linux-strip
load(qt_config)
上面主要是放你tslib库的路径和你交叉编译器的路径,全用绝对路径!否则可能会出错。
然后修改下面文件
vim qtbase/src/widgets/itemviews/qabstractitemview.cpp
2369 #endif // QT_KEYPAD_NAVIGATION
2370 case Qt::Key_Home:
2371 case Qt::Key_End:
2372 case Qt::Key_PageUp:
2373 case Qt::Key_PageDown:
2374 case Qt::Key_Escape:
2375 case Qt::Key_Shift:
2376 case Qt::Key_Control:
2377 case Qt::Key_Delete:
2378 case Qt::Key_Backspace:
将'Key_BackSpace' 更改为将'Key_Backspace',低版本的可能是大写,需要改成小写。我这个版本是小写,不需要改动。然后开始执上面的行脚本
我这里用虚拟机编译了大概2个多小时(时间是根据电脑的配置来决定的),
只要它最后不报错的话,应该没有太大的问题。这段时间该干嘛就干嘛去了,我睡了一觉,起来就编译好了。
注意:版本不同,脚本的一些可能会有所改变。我的是5.6.1的
安装完成之后,将该目录下的qt复制到/usr/local/bin目录下
qt移植成功后,要将qt生成的lib库和fonts文件打包压缩传到开发板上去。但是因为我前面制作的根文件系统中没有挂载/apps,和data区。
我们虽然分了区,但这个设备并没有挂载到系统上,所以并不能使用它。只有挂载了,系统才能对它进行读写操作,就像USB一样,只有在电脑上识别了这个设备,才能操作它。所以解压时会报错说 No left space,没有剩余的空间。所以要在/etc/inittab文件添加挂载分区的命令
下面是qt的shell脚本,参考的视屏给的资料
#!/bin/bash
#+--------------------------------------------------------------------------------------------
#|Description: This shell script used download and compile QT5 for ARM
#+--------------------------------------------------------------------------------------------
PREFIX_PATH=`pwd`/ //安装包
QT_INST_PATH=/apps/ //安装路径
if [ -z $CROSSTOOL ] ; then
CROSSTOOL=/opt/xtools/arm920t/bin/arm-linux-
fi
function msg_banner()
{
echo ""
echo "+-----------------------------------------------------------------------"
echo "| $1 "
echo "+-----------------------------------------------------------------------"
echo ""
}
function check_result()
{
if [ $? != 0 ] ; then
echo ""
echo "+-----------------------------------------------------------------------"
echo "| $1 "
echo "+-----------------------------------------------------------------------"
echo ""
exit ;
fi
}
function export_cross()
{
# export cross toolchain
export CC=${CROSSTOOL}gcc
export AS=${CROSSTOOL}as
export AR=${CROSSTOOL}ar
export LD=${CROSSTOOL}ld
export NM=${CROSSTOOL}nm
export RANLIB=${CROSSTOOL}ranlib
export OBJDUMP=${CROSSTOOL}objdump
export STRIP=${CROSSTOOL}strip
# export cross configure
export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux "
# Clear LDFLAGS and CFLAGS
export LDFLAGS=
export CFLAGS=
}
function compile_qt()
{
SRC_NAME=qt-everywhere-opensource-src-5.6.1
PACK_SUFIX=tar.xz
if [ -f ${PREFIX_PATH}/ethtool ] ; then
return 0;
fi
msg_banner "Start cross compile $SRC_NAME "
if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then
check_result "ERROR: download ${SRC_NAME} failure"
fi
xz -dk ${SRC_NAME}.${PACK_SUFIX} && tar -xf ${SRC_NAME}.tar && rm -f ${SRC_NAME}.tar
cd ${SRC_NAME}
sed -i "s|arm-linux-gnueabi-|$CROSSTOOL|" qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
./configure -opensource -confirm-license -release -shared -strip -prefix ${QT_INST_PATH} -no-c++11 \
-xplatform linux-arm-gnueabi-g++ -no-opengl -qt-freetype -no-avx -make libs -optimized-qmake \
-qt-zlib -no-gif -qt-libpng -qt-libjpeg -no-openssl -no-cups -no-dbus -linuxfb -pch -qt-sql-sqlite \
-no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-rpath -no-glib -qreal float -no-xcb \
-no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -nomake tools -nomake examples \
-no-tslib
//因为我用到tslib,触摸屏,所以要将这里去掉,改为
-I /usr/local/tslib/include \
-L /usr/local/tslib/lib
check_result "ERROR: configure ${SRC_NAME} failure"
make -j8 && make install
check_result "ERROR: compile ${SRC_NAME} failure"
cd -
}
compile_qt