#!/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的一些应用,和不安装的一些应用
然后在开发板上搭建环境。
首先将你安装好后的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,否则会报错
添加完成后使能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
然后就安装它,就和电脑安装软件一样
如果没有执行权限,就打开终端给它权限
chmod a+x qt-creator-opensource-linux-x86_64-3.3.0.run
然后再点击安装
接下来是搭建环境:
这是我把原来的删掉自己添加的(你也可以不添加,毕竟这里qmake本来就是我拷贝过去的 )
这一步是把前面的两个构成套件
#!/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
所以我换了qt5,但是出现了这样的问题
是因为我的脚本没装xcb
所以我又重新安装(但是并没有解决触屏问题,再研究研究研究)