Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator

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脚本(只适用5.6.1,因为每个版本的configure命令不一样,所以这里指定的命令也不同)
#!/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的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
wget http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.6/5.6.1/single/${SRC_NAME}.${PACK_SUFIX}
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

这里的脚本是选择安装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',低版本的可能是大写,需要改成小写。我这个版本是小写,不需要改动。然后开始执上面的行脚本
Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第1张图片
我这里用虚拟机编译了大概2个多小时(时间是根据电脑的配置来决定的), 只要它最后不报错的话,应该没有太大的问题。这段时间该干嘛就干嘛去了,我睡了一觉,起来就编译好了。
注意:版本不同,脚本的一些可能会有所改变。我的是5.6.1的
安装完成之后,将安装目录中的bin文件下的qmake复制到/usr/bin目下
然后执行qmake,出现如图所示,则证明安装成功(我安装了Qt5.6.1后又换成了4.8.6的,后面会给出脚本)

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第2张图片

然后在开发板上搭建环境。

首先将你安装好后的Qt下的lib文件打包,传到开发板上面去。

tftp -pr tslib.tar.gz  192.168.1.20  (注意,这里是我前面博客已经弄好的)

tftp -gr EmbeddedQt.4.8.6.tar.gz 192.168.1.20

再解压,就可以在/apps(这是我自己挂载的目录,根据自己的情况而定)下看到解压的文件

接着就是搭建Qt的环境了

vi /etc/profile

下面是我添加的环境变量(这个EmbeddedQt4.8.6是我后来创建的,然后把lib文件放到这个目录下了)
export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/lib:/apps/EmbeddedQt4.8.6/lib
export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/lib:/apps/EmbeddedQt4.8.6.8/lib/fonts
注意:我这里添加的环境变量的方法是错误的,因为我设置的LD_LIBRARY_PATH是两个相同的变量,到致后面的变量把前面的变量覆盖了,所以只有后面的变量生效
改成这样:export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/lib:/apps/EmbeddedQt4.8.6.8/lib/fonts:/apps/EmbeddedQt4.8.6/lib

export QWS_MOUSE_PROTO=TSLIB:/dev/event1         
export QTLIB=/apps/EmbeddedQt4.8.6/lib           
export QT_QWS_FONTDIR=/apps/EmbeddedQt4.8.6/lib/fonts

注意这里的环境要检查清楚,不然在运行qt的可执行文件是会有错误


这是Qt的环境变量设置有问题才会导致这样的情况。运行时记得加-qws,否则会报错

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第3张图片

添加完成后使能profile文件

因为要纯命令编译Qt有的时候也太累了,所以我就在ubuntu上安装了qtcreator,这款软件可以直接通过拖控件来实现代码。很方便

在安装Qt之前要先安装下面的一些库

wget http://ftp.ca.debian.org/debian/pool/main/g/gstreamer0.10/libgstreamer0.10-0_0.10.36-1.5_amd64.deb
wget http://ftp.ca.debian.org/debian/pool/main/g/gst-plugins-base0.10/libgstreamer-plugins-base0.10-0_0.10.36-2_amd64.deb
sudo dpkg -i libgstreamer0.10-0_0.10.36-1.5_amd64.deb
sudo dpkg -i libgstreamer-plugins-base0.10-0_0.10.36-2_amd64.deb

然后下载qtcreator(也可以下载别的)

wget https://download.qt.io/official_releases/qtcreator/3.3/3.3.0/qt-creator-opensource-linux-x86_64-3.3.0.run
然后就安装它,就和电脑安装软件一样

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第4张图片

如果没有执行权限,就打开终端给它权限

chmod a+x qt-creator-opensource-linux-x86_64-3.3.0.run

然后再点击安装

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第5张图片

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第6张图片

我的安装目录就是Qt的安装目录,方便管理嘛。
Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第7张图片
Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第8张图片
然后点击install,(注意:如果这里你的安装目录是所属root的话,它安装的时候会提示输入sudo的密码,然后你输入即可)

接下来是搭建环境:

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第9张图片


Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第10张图片

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第11张图片
点击apply

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第12张图片

这是我把原来的删掉自己添加的(你也可以不添加,毕竟这里qmake本来就是我拷贝过去的 )

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第13张图片

这一步是把前面的两个构成套件

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第14张图片

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第15张图片

到此qtcreator基于arm开发板的环境搭建完毕。

这里附上qt4.8.6的编译脚本
#!/bin/bash

#***********************************************************************************************************************
#     Author:anzhihong
#     This file is to install Qt4.8.6
#***********************************************************************************************************************


#Qt version 4.8.6
VERSION=4
PATCHLEVEL=8
SUBLEVEL=6
#download Qt
wget https://download.qt.io/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-$VERSION.$PATCHLEVEL.$SUBLEVEL.tar.gz

#tar xjf qt-everywhere-opensource-src-$VERSION.$PATCHLEVEL.$SUBLEVEL.tar.gz

echo before you patch,you must be sure you have the patch of Qt.4.8.6 the address of git is [email protected]:zhizhi1212213/An-Project.git then  tar xjf qt-everywhere-opensource-src-$VERSION.$PATCHLEVEL.$SUBLEVEL.tar.gz

cd qt-everywhere-opensource-src-$VERSION.$PATCHLEVEL.$SUBLEVEL


patch -p1 < ../Qt.4.8.6.patch   //注意先去我的git上下载个补丁包
echo yes | ./configure -opensource -release -shared -fast -embedded arm -xplatform qws/linux-arm-g++ -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-svg -qt-zlib -no-webkit -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -little-endian -qt-freetype -depths 16,18 -no-glib -no-javascript-jit -no-script -no-scripttools -I /usr/local/Trolltech/tslib/include  -L /usr/local/Trolltech/tslib/lib -qt-mouse-pc -no-mouse-linuxtp -qt-gfx-linuxfb -qt-gfx-transformed -no-gif

make -j4
sudo mknod make install
qt移植成功后,要将qt生成的lib库和fonts文件打包压缩传到开发板上去。但是因为我前面制作的根文件系统中没有挂载/apps,和data区。 我们虽然分了区,但这个设备并没有挂载到系统上,所以并不能使用它。只有挂载了,系统才能对它进行读写操作,就像USB一样,只有在电脑上识别了这个设备,才能操作它 。所以解压时会报错说 No left space,没有剩余的空间。所以要在/etc/inittab文件添加挂载分区的命令
(上述qt4.8.6我没有出现问题,但是qtcreater出了问题,开发板不能触屏)

所以我换了qt5,但是出现了这样的问题

Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator_第16张图片

是因为我的脚本没装xcb

所以我又重新安装(但是并没有解决触屏问题,再研究研究研究)

你可能感兴趣的:(Linux下Qt学习(二)——开发板搭建Qt运行环境以及Qtcreator)