树莓派3B+Qt5.12.4
这边为树莓派3B 使用的QT源码和IDE版本均为QT5.12.4
【树莓派】准备工作:
- 树莓派默认账号是 username: pi, password: raspberry;
- 树莓派更新固件和驱动:
sudo rpi-update(基本上不成功,具体更新操作可以看这篇,要下载的话最好早上下载,速度会比较快)
sudo reboot
- 更新程序并安装必要的文件:
(1)、首先修改 /etc/apt/sources.list 文件 (注意要用管理员权限), 去掉 deb-src 所在这 一行头部的 # 号,解开注释(注意:其他源不要修改,不要使用国内镜像源,不然 下面2的操作会失败的);
(2)、更新必要的库:
sudo apt-get update
sudo apt-get build-dep qt4-x11
sudo apt-get build-dep libqt5gui5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libinput-dev libxkbcommon-dev libsqlite3-dev libssl-dev libpng-dev libjpeg-dev libglib2.0-dev libraspberrypi-dev libpq-dev libmariadbclient-dev bluez libbluetooth-dev build-essential
- 、新建文件夹:
sudo mkdir /usr/local/Qt5.12.4
sudo chown pi:pi /usr/local/Qt5.12.4
(4)、编译好的可执行文件会放在树莓派的/opt目录下,但默认的pi用户没有创建文件夹或文件的权限,需要在根目录执行:sudo chmod -R 777 /opt
远程调试时需要安装gdbserver:sudo apt-get install gdbserver
【PC】准备工作:
1、在电脑上创建工作文件夹。
mkdir ~/raspi
cd ~/raspi
- 在linaro上下载交叉编译工具链,包括gcc、runtime、sysroot三项:
下载后解压并合并(把三个解压出来的文件夹放在一个目录下),放在~/raspi/cross-compile-tool/目录下
如果电脑上没有C/C++编译环境,执行:
sudo apt-get install build-essential
使64位系统兼容32位的库:
sudo apt install lib32ncurses5 lib32z1
echo 'export PATH=$PATH:~/raspi/cross-compile-tool/' | sudo tee -a /etc/profile
echo 'export PATH=$PATH:~/raspi/cross-compile-tool/bin' | sudo tee -a /etc/profile
# echo后面一定要用单引号
source /etc/profile
3、创建和配置sysroot
其实就是把树莓派上的库都弄到PC上来,形成一个和树莓派一样的环境,这样我们交叉编译的时候就可以链接到里面的库和头文件了。
执行以下命令把库和头文件拷贝到PC上:
cd ~/raspi
rsync -avz pi@your rpi IP address:/lib sysroot
rsync -avz pi@your rpi IP address:/usr/include sysroot/usr
rsync -avz pi@your rpi IP address:/usr/lib sysroot/usr
rsync -avz pi@your rpi IP address:/opt/vc sysroot/opt
# 记得改成你的树莓派的ip地址
树莓派地址的查看可以利用ifconfig
然后需要修改sysroot里面的软链接,里面有很多软连接使用的都是绝对路径,那就会直接链接到你PC的/usr、/lib目录里面去,那肯定是错的,我们希望它们链接到sysroot里面对应的库。所以我们需要把绝对路径改成相对路径。直接用网上现成的python脚本完成。
cd ~/raspi
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
4、(1) 下载Qt
下载并解压Qt 5.12.4,当然其他版本也可以。
wget http://download.qt.io/official_releases/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz
tar xvf qt-everywhere-src-5.12.4.tar.xz
cd qt-everywhere-src-5.12.4
- 配置Qt (貌似不用修改也可以编译成功)
编辑./qtbase/mkspecs/devices/linux-rasp-pi3-g++/qmake.conf文件:
① 分别将所有的-lEGL替换成-lbrcmEGL,-LGLESv2替换成-lbrcmGLESv2。
② 修正文件中的4处错误,修正后如下:
VC_LIBRARY_PATH = $$[QT_SYSROOT]/opt/vc/lib
VC_INCLUDE_PATH = $$[QT_SYSROOT]/opt/vc/include
VC_LINK_LINE = -L$${VC_LIBRARY_PATH}
QMAKE_LIBDIR_OPENGL_ES2 = $${VC_LIBRARY_PATH}
- 配置编译选项
./configure -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=~/raspi/cross-compile-tool/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -make libs -prefix /usr/local/Qt5.12.4 -extprefix ~/raspi/Qt5.12.4 -hostprefix ~/raspi/Qt5.12.4-host -no-use-gold-linker -v -no-gbm
make
make install
rsync -avz Qt5.12.4 pi@raspberrypi_ip:/usr/local 同步到树莓派
编译需要的时间看电脑配置,一般1~2个小时
- 编译quick、quick control、qtcharts
由于qtquick2依赖于qtquick,而quick属于qtdeclarative,所以先编译qtdeclarative
cd ~/raspi/qt-everywhere-src-5.14.2/qtdeclarative
用刚刚编译出来的qmake工具来配置
这个qmake的作用是沿用前面qtbase交叉编译时的配置
~/raspi/qt5pi-host/bin/qmake
make
make -j4 && make install
然后再编译我们要的quickcontrols2,步骤一样
cd ~/raspi/qt-everywhere-src-5.14.2/qtquickcontrols2
~/raspi/qt5pi-host/bin/qmake
make -j4 && make install
Qtcharts还要编译一下src下面的代码
cd ~/raspi/qt-everywhere-src-5.14.2/qtcharts
~/raspi/qt5pi-host/bin/qmake
make -j4 && make install
cd ~/raspi/qt-everywhere-src-5.14.2/qtcharts/src
~/raspi/qt5pi-host/bin/qmake
make -j4 && make install
rsync -avz Qt5.12.4 pi@raspberrypi_ip:/usr/local 同步到树莓派
后面配置后编译器,用交叉编译环境编译好的程序,也是通过这个操作同步到树莓派上,直接就可以运行了,因为库的路径是一样的
5、配置编译器 (略)
6、复制字体库
安装中文字体库:
sudo apt-get install ttf-wqy-zenhei
复制中文字体库:将/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc 复制到 /usr/local/qt5pi/lib/fonts。
复制英文字体库:将/usr/share/fonts/truetype/dejavu 中的文件复制到 /usr/local/qt5pi/lib/fonts。