Arm上直接编译Qt库

Posted 雪回

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arm上直接编译Qt库相关的知识,希望对你有一定的参考价值。

因为在windows上交叉编译arm qt库总是出现奇怪的问题,后来直接在arm板子上直接编译成功,之所以先选择在windows交叉编译是因为arm的cpu内存硬件等各方面都比不上,会编译库的速度比较慢,所以首先选择在别的地方交叉编译库出来

一、下载源码

https://download.qt.io/official_releases/qt/5.12/5.12.12/single/

二、创建一个文件夹a,将qt源码放入。并且在该文件夹内创建一个文件夹b用来存放编译出来的qt文件

三、将qt源码解压tar压缩包

tar xvJf 解压文件名

四、进入解压后的源码文件夹

cd 文件名 

./configure -prefix 创建出来的文件夹b的路径 -nomake tests -nomake examples -no-opengl -skip qtvirtualkeyboard  -skip qtwebengine


configure最后会出现这些,yes说明具有这个库,no说明还没安装这个库。有些库是必须安装的,不然会出现未知错误,其实就是因为缺少依赖库。以下几个库需要安装
xkbcommon-x11
iconv
Xcb icccm
GTK+
Libclang
alsa
Gstreamer
Libevent
jsoncpp
protoc
nss
用sudo apt install 包名
包名是不确定的,要么是前面加lib,要么是后面加*,或者加-dev
比如要下iconv,可以试试

sudo apt install iconv
sudo apt install iconv-dev
sudo apt install libiconv
sudo apt install iconv*
sudo apt install libiconv*

尽量都下载,个别没下载下来也可以试试是否编译成功

make

这个过程大概等待几个小时

make install

五、编译cmake项目

cmake ..

make

则项目源码编译成功

QT5静态编译工程(arm交叉编译)

1、首先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境

2、下载QT源码(5.13版本):http://download.qt.io/development_releases/qt/5.13/5.13.0-rc/single/qt-everywhere-src-5.13.0-rc.tar.xz

3、编译QT前需先配置交叉编译器:

  解压源码后,进入源码的qtbase/mkspecs/linux-arm-gnueabi-g++目录,编辑里面的qmake.conf文件:

  将文件里的arm-linux-gnueabi-都改为你用的交叉编译器(带路径,如果不带路径则需设置好PATH变量)比如改为:arm-linux-gnueabihf-

4、用静态方式编译并安装QT
  在源码目录下执行如下命令:  

  ./configure -v -prefix /home/wch/Qt-5-arm -static -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -no-accessibility -no-dbus -no-openssl -no-opengl -no-glib -no-iconv -no-xcb -no-pch -no-compile-examples -no-pkg-config -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -skip qtwayland
  make
  make install

  其中/home/wch/QT-5-arm是安装目录,根据你的情况指定;-static是指定为静态编译;-xplatform linux-arm-gnueabi-g++是说明目标平台是arm,其它参数根据自己的情况自行修改,各参数的含义可以用./configure --help命令查看

  经过上面三步,就在指定的/home/wch/QT-5-arm目录下生成的QT的编译环境,该环境的bin目录下有qmake程序。

5、编译你的工程

  假设你的工程名称是t1.pro,用如下命令编译:

    qmake -o Makefile t1.pro

    make

  则会生成静态程序,一个最简单的窗口程序大约10M。

  用命令t1 -platform linuxfb运行,但是运行时会发现报错:Could not find the Qt platform plugin "linuxfb" 

  在t1.pro工程文件里添加一行:QTPLUGIN += qlinuxfb

  再用之前的命令重新编译一下,运行成功!  

以上是关于Arm上直接编译Qt库的主要内容,如果未能解决你的问题,请参考以下文章

如何将Linux下的QT程序移植到arm板上

关于QT开发平台和arm嵌入式的关系。

紧急求助,关于arm版本下QWT库移植出现的错误

如何将用QT做好的播放器移植到ARM开发板上

编译 arm 版的qt

关于QT开发平台和arm嵌入式的关系。