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库的主要内容,如果未能解决你的问题,请参考以下文章