系统平台:ubuntu 16.04
QT源码信息:
QT版本:QT5.5.1
下载地址:http://download.qt.io/archive/qt/5.5/5.5.1/single/
下载包名: qt-everywhere-opensource-src-5.5.1.tar.gz
交叉编译工具:
下载地址:http://releases.linaro.org/archive/14.07/components/toolchain/binaries/
名称:gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.bz2
版本:4.9.1
注:文中提到的附件都贴在文章的最后面
移植流程:
1、安装交叉编译链:
解压:tar -zxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.bz2
然后在环境变量里面(/etc/profile)添加交叉编译链的路径。
重启系统使环境变量生效
2、解压QT源码包
tar -zxvf qt-everywhere-opensource-src-5.5.1.tar.gz
3、配置QT
将 ./qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/linux-arm-gnueabi-g++目录下的qmake.conf替换成附件1的内容
在 ./qt-everywhere-opensource-src-5.5.1目录下创建一个autoconf.sh文件,并更改权限
命令: touch autoconf.sh
sudo chmod 777 autoconf.sh
将 autoconf.sh文件里面的内容替换成附件2的内容
执行 autoconf.sh
命令 ./autoconf.sh
4、编译、安装QT
make -j16
make -j16 install
5、移植QT到开发板上
在ubuntu操作系统(即我们的主机)/usr/local目录下,可以看见一个Qt-5.5.1的目录,将该目录复制到开发板的/usr/local下面,路径一定要一致
6、在开发板上配置QT相关环境变量
在开发板的/etc/profile文件里面添加附件3的内容,注意是添加
7、编译开发板可以用的QT程序
使用QT-creator创建一个简单的Qwidget程序,随便一个简单的图形界面。
通过命令行,进入到我们创建的工程,删除其他的文件,只剩下:main.cpp mainwindow.cpp mainwindow.h mainwindow.ui四个文件
然后执行命令:/usr/local/Qt-5.5.1/bin/qmake -project QT+=widgets
qmake
make
然后可以看见当前目录下会生成可执行文件,将该文件复制到开发板上。
进入开发板,运行我们复制过来的QT程序
注:假设我们生成的可执行的程序名字是monkey 通过file monkey可以查看该文件是不是arm的可执行程序,显示的信息如附件4
运行程序的时候,可能会提示依赖库文件,这个时候,查看附近4的信息里面有 这样一句 /lib/ld-linux-armhf.so.3
然后去开发板 /lib下面,通过ln命令将我们的 ld-linux-armhf.so.3 软链接到开发板 /lib里面的 ld-2.22.so(这个ld-2.22.so文件各个系统可能有所不同)
然后重新运行
附件1:
#
# 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)
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS += -march=armv7-a -mfpu=neon #-DLINUX=1 -DEGL_API_FB=1
QMAKE_CXXFLAGS += -march=armv7-a -mfpu=neon #-DLINUX=1 -DEGL_API_FB=1
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_NM = arm-linux-gnueabihf-nm -P
QMAKE_STRIP = arm-linux-gnueabihf-strip
load(qt_config)
附件1结束\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
附件2:
#!/bin/sh
#下面的配置信息可以通过 ./configure --help查看
./configure \
-prefix /usr/QT-5.5.1/ \
-opensource -confirm-license -no-pch -no-xcb -no-openssl -no-opengl \
-dbus \
-qt-zlib \
-no-sse2 \
-no-iconv \
-release \
-no-dbus \
-make libs \
-no-opengl \
-qt-zlib \
-no-iconv \
-qt-libjpeg \
-linuxfb \
-force-pkg-config \
-xplatform linux-arm-gnueabi-g++ \
-no-gcc-sysroot \
-make examples -nomake tools -nomake tests
# make -j 16 && make -j 16 install
#-xplatform linux-arm-gnueabi-g++ 这个参数就是我们移植流程3的第一步的操作目录 意思是:指定编译的平台或者设备
#-prefix /usr/QT-5.5.1/ 指定我们编译好后的文件存储路径
附件2结束\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
附件3
export QT_ROOT=/usr/local/Qt-5.5.1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib:$QT_ROOT/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=/dev/input/event5
export QML2_IMPORT_PATH=$QT_ROOT/qml
附件3结束\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
附件4
monkey: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.1.1, BuildID[sha1]=589ee01ccb61e306346b1c3135738da0d73164a9, not stripped
附件4结束\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\