Qt学习之路(二)——开发板搭建Qt程序运行环境

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





猜你喜欢

转载自blog.csdn.net/buhuiguowang/article/details/80186347