来自QQ群 Linux && 技术分享 311078264
打开链接加入QQ群:https://jq.qq.com/?_wv=1027&k=5Gr3bAx
此文档由elikang整理,为了文章简单直接,许多细节未能在文章中体现,如有疑问请进群讨论。
参考文章:
https://doc.qt.io/qt-5/linux.html
交叉编译工作在Ubuntu18.04上进行,编译器的版本是7.3.0(官方权威推荐的编译器版本,Ubuntu16.04上是5.4.0)。
在正式编译之前进行一下准备工作。
执行一下这个操作:sudo apt-get install build-essential libgl1-mesa-dev
安装编译器:arm-linux-gnueabi-gcc:
$ sudo apt-get install gcc-arm-linux-gnueabi
$ sudo apt-get install g++-arm-linux-gnueabi
或者安装arm-linux-gnueabihf-gcc:
$ sudo apt-get install gcc-arm-linux-gnueabihf
$ sudo apt-get install g++-arm-linux-gnueabihf
(armel和armhf两个不同的架构,需要根据移植的平台选择。
或者使用 arm-none-linux-gnueabi-gcc ,qmake.conf需要同步进行更改。)
安装python环境(新的qt版本加入了python的支持):
sudo apt-get install python
sudo apt-get install python-dev
sudo apt-get install python-pip
第一步:下载qt-everywhere-src-5.12.2.tar.xz
wget https://download.qt.io/archive/qt/5.12/5.12.2/single/qt-everywhere-src-5.12.2.tar.xz
第二步:解压源码压缩包
用终端解压:tar -xvf qt-everywhere-src-5.12.2.tar.xz
(最好别右击“提取到此处”,这个解压好像和命令解压不同,有时影响编译。)
第三步:修改编译配置文件
cd qt-everywhere-src-5.12.2/
vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
(注意我的改动,选用arm-linux-gnueabi-gcc的话,基本不需要修改。)
#
# 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)
注意:
这里指定了编译arm版qt所使用的编译器,与后期QtCreator项目的编译器是一样的。
如果你是用的是arm-none-linux-gnueabi-gcc,那么每一项都需要修改为arm-none-linux-gnueabi-*。
#这里提前解释一下,第三步中已经指定好了编译器版本,所以第四步不需要指定了。
#第四步中的-xplatform linux-arm-gnueabi-g++是对应qmake.conf所在的文件夹,代表了编译的Qt库的移植平台。
第四步:配置编译参数,用./configre -help 可以查看参数介绍
我的配置是:
./configure -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -prefix /usr/local/qt5.12.2 -nomake examples -no-opengl -silent -qpa linuxfb
注意:
1、-xplatform linux-arm-gnueabi-g++ ,指定了编译Qt库的移植平台;
2、-prefix后面的配置为qt库安装(make install)的位置,这个需要根据你的安装位置自己指定。
第五步:make
如果上面配置没有问题,接下来make:
$make
或者
$make -j2 /*CPU 几个核可以使用“-j几”,核多编的快*/
第六步:安装
$sudo make install
在这里加sudo是因为,安装时会将库文件复制到上面第四步配置的安装目录( /usr/local/qt5.12.2),usr目录是需要root权限的。
设置环境变量
sudo vim /etc/profile
在文件末尾加上 export PATH=$PATH:/usr/local/qt5.12.2/bin
更新环境变量 source /etc/profile
然后就可以通过qmake -v 来查看Qt的版本
好了,这是编译Qt5.12.2的过程。
编译平台插件:
由于Qt5以后,删除了嵌入式的QWS(Qt windows system-Qt窗体系统)换成QPA(Qt Platform Abstration -Qt平台抽象),平台插件在qt-everywhere-opensource-src-5.*/qtbase/src/plugins/platforms/下面。有各种平台的插件,基于frambuffer的插件是lunuxfb这个文件夹下,其他的还有android、ios、winrt、windows等等,需要什么平台的编译就是了。
Ubuntu下编译Qt常见错误
(转载自 作者:_saga 来源:CSDN 原文:https://blog.csdn.net/saga1979/article/details/6247883)
1.执行./configure 出现: /bin/sh^M: bad interpreter: No such file or directory
这是因为unix和window的行结束字符不同,执行 sed -i 's/\r$//' configure 就可以了
2. 执行./configure 出现:"You don't seem to have 'make' or 'gmake' in your PATH"
sudo apt-get install build-essential
如果还不能解决,手动指定$MAKE
export MAKE=/usr/bin/make
3.编译时(webkit)出现:"cannot find -lXrender"
确认安装了libX11-dev
如果还不行:
cd /usr/lib
ln -s libXrender.so.1 libXrender.so
(其中的libXrender.so.1为安装的x11版本)
注意: 编译时需要修改mkspecs/xxx文件夹的qmake.conf默认X11和OpenGL配置
默认配置->
QMAKE_LIBDIR_X11 = /usr/X11R6/lib64
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib64
例:(ubuntu 10.10 X64)
QMAKE_LIBDIR_X11 = /usr/lib/X11