内核版本5.10.9
操作系统Ubuntu20.04 focal
环境讯为iTOP-3588
由于要和后端对接,所以需要用Qt中的webengine,但是apt-get下载的版本是5.12.8,对应的chorme内核版本太低,没法加载相关的东西,故对着源码充。
网上虽然好多好多,但是这里记录一下自己
所需的前置:gcc、g++、make、cmake、meson、ninja
1.安装依赖
sudo apt install build-essential libgl1-mesa-dev libxkbcommon-dev libnss3-dev libdbus-1-dev gperf flex bison
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt install libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison nodejs
sudo apt-get install gperf
sudo apt-get install flex
sudo apt-get install bison
sudo apt install libnss3-dev
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libxcb-xinerama0-dev
sudo apt-get install build-essential perl python git
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby
sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libdbus-1-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison
sudo apt-get install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gst*
sudo apt install libclang-6.0-dev llvm-6.0
sudo apt-get install clang-8
sudo apt-get install clang
apt-get install repo git gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools \
parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools libssl-dev \
autotools-dev libsigsegv2 m4 libdrm-dev curl sed make binutils build-essential gcc g++ bash \
patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libglib2.0-dev \
openssh-client lib32stdc++6 gcc-aarch64-linux-gnu libncurses5-dev lzop libssl1.0.0 libssl-dev \
libglade2-dev cvs mercurial subversion asciidoc w3m dblatex graphviz python-matplotlib \
libc6:i386 texinfo liblz4-tool genext2fs expect autoconf intltool libqt4-dev libgtk2.0-dev
上面好多一坨,直接复制安装就OK,基本上涵盖了webengine serialport multimedia 等,基本上环境就OK。
安装ninja:
(1)安装ninja依赖
sudo apt-get install re2c
(2)编译ninja
cd qt-everywhere-src-5.15.2/qtwebengine/src/3rdparty/ninja
./configure.py --bootstrap
(3)安装
sudo cp ./ninja /usr/bin
ninja --version
这里如果需要编译Qwebengine,里面的第三方插件就有ninja编译的东西,我这里看别人是安装这个,但是ninja在编译Qt的时候自己会编译,这里面可以做但也可以不做,但是ninja依赖必须安装。
2.创建config的shell脚本
创建shell脚本
sudo gedit autoconfig.sh
然后将下面的复制。
#! /bin/bash
./configure \
-prefix /home/admin123/qt5.15.2_ARM \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-optimized-qmake \
-c++std c++14 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-gui \
-widgets \
-dbus-runtime \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-linuxfb \
--libpng=system \
--libjpeg=system \
--sqlite=qt \
-plugin-sql-sqlite \
-recheck-all
然后给权限
sudo chmod 777 ./autoconfig.sh
这是我需要的配置,我遇到了libjpeg编译特别慢,而且总是ninja编译出错等,所以我就在本地安装好然后配置系统中的,对应倒是第四行。config的具体参数解释在这里。
接下来就是可爱又可恨的检查前置,不过按照上面的走基本问题不大。我自己的config脚本得到的是下图:
如果想重新配置就把源码下面的config.cache删除,然后重新./autoconfig.sh就ok了
缺啥就用apt-get 下载啥一般按照我这个应该不会出错
apt-get install
3.编译
配置完了,如果没有下面这种WARNING 一般就可以了,下面这个图我是借的这个兄弟的文章里面的图:
Qt5.15.2 Linux ARM架构源码编译安装(UOS20国产系统)_qt打包arm架构程序-CSDN博客
直接补充一下奥,这里可以直接make -j16 但是编译webengine的时候会因为内存不够而中途中断,例如:C++: fatal error: Killed signal terminated program cc1plus
如果不怕麻烦可以自己去点,他退出一次make一次,不过make 就不能-j16了,可以少几个线程,也可以增加swap分区,
sudo dd if=/dev/zero of=/swapfile bs=4G count=1
#count的大小就是增加的swap空间的大小,1G是块大小为1G,所以空间大小是bs*count=6G
sudo mkswap /swapfile
su
chmod 0600 /swapfile
sudo swapon /swapfile
ok接下来就是编译了。我这边编译除了上述问题基本没出毛病,如果有毛病的给大家推荐一个文章
OK就这样。