准备环境和工具
1、主机环境 ubuntu20
2、交叉编译器 gcc-linaro-6.3.1..arm-linux-gnuebihf
3、QT5源码包qt-5.11.3_sources
下载qt-5.11.3的包需要先带网络代理软件,再访问下载目录就可以显示了。
Index of /archive/qt
4、依赖库安装
sudo apt install g++ make qt3d5-dev-tools -ysudo apt install qml-module-qtquick-xmllistmodel -ysudo apt install qml-module-qtquick-virtualkeyboard qml-module-qtquick-privatewidgets qml-module-qtquick-dialogs qml -ysudo apt install libqt53dquickscene2d5 libqt53dquickrender5 libqt53dquickinput5 libqt53dquickextras5 libqt53dquickanimation5 libqt53dquick5 -ysudo apt install qtdeclarative5-dev qml-module-qtwebengine qml-module-qtwebchannel qml-module-qtmultimedia qml-module-qtaudioengine -y
4、解包交叉编译器和qt源码
tar -xvf gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf.tar
可以选择将gcc编译器,移动到opt目录下
tar -xvf qt-everywhere-src-5.11.3.tar.xz
cd qt-everywhere-src-5.11.3
5、修改qmake.conf
路径: qt-everywhere-src-5.11.3/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 = sublibinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)# modifications to g++.conf
#交叉编译工具
QMAKE_CC = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc -lts
QMAKE_CXX = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK_SHLIB = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ -lts# modifications to linux.conf
#交叉编译工具
QMAKE_AR = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-strip
load(qt_config)#tslib路径(交叉编译库)
QMAKE_INCDIR=/opt/tslib-1.21/include
QMAKE_LIBDIR=/opt/tslib-1.21/lib
6、configure配置脚本文件
为了防止代码污染,可以先新建一个build目录
mkdir build && cd build
#!/bin/sh
./configure \
-prefix /opt/rk3288/qt-5.11.3/ \
-xplatform linux-arm-gnueabi-g++ \
-gui \
-widgets \
-release \
-opensource \
-confirm-license \
-no-openssl \
-no-opengl \
-skip qtdeclarative #这行是可选的,加上会不编译qml quick模块,需要就删掉这一行
7、特别说下 -skip qtdeclarative这一条,名字很坑完全看不出和quick有什么关系,网上很多都说编译会报错就加上这个,也可能是因为用不到quick为了缩小体积,很多配置文件都把这个给加上了,但是这个是qml quick模块,需要这部分功能的一定不要加,而且我这边编译也没报错。
8、build
make -j8
sudo make -j8 install
9、编译报错处理
1),error1 :qt-everywhere-src-5.11.3/qtbase/src/corelib/global/qrandom.cpp:455:62: error: no matching function for call to ‘std::mersenne_twister_engine
方法:在qrandom.cpp 的219行,增加一条定义 typedef quint32 result_type;
qsizetype fillBuffer(void *, qsizetype) Q_DECL_NOTHROW{// always use the fallbackreturn 0;}
#endif // Q_OS_WINRTtypedef quint32 result_type;static SystemGenerator &self();void generate(quint32 *begin, quint32 *end) Q_DECL_NOEXCEPT_EXPR(FillBufferNoexcept);
2),error: ‘SIOCGSTAMP’ undeclared (first use in this function); did you mean ‘SIOCGARP’?
解决:找到socketcanbackend.cpp并打开,添加头文件#include <linux/sockios.h>即可解决问题
3),python: not found
解决:在终端输入命令sudo ln -s /usr/bin/python3 /usr/bin/python 将Python和Python3连接到一起
4),缺少 libxcb*
解决:sudo apt-get install libxcb*
10、参考文章
交叉编译qt5.11.3源码(不带opengl)_libts包 qt-CSDN博客
QT源码版本5.11.3 (qt-everywhere-src-5.11.3)编译过程中错误,内部bug._qt5.11.3-CSDN博客
Ubuntu20.04安装Qt5.9.9+Qt creator并编译Qt库,解决SIOCGSTAMP was not declared-CSDN博客