原理性请参考如下文章
安装python环境(新的qt版本加入了python的支持):
sudo apt-get install python
sudo apt-get install python-dev
sudo apt-get install python-pip
树莓派学习::qt5交叉编译(armv8 64位)._dieju8330的博客-CSDN博客_armv8 qt
这里对上文做补充
QT5.13.0 的./configure参数解释(最新版本)_有点甜0612的博客-CSDN博客
QT5.6编译./configure参数的详细解释_明卿的博客-CSDN博客
pkgconfig使用https://www.jianshu.com/p/0faea1f431ec
设置连接库路径
export LD_LIBRARY_PATH=/mnt/usr/lib/aarch64-linux-gnu:/mnt/lib/aarch64-linux-gnu:/mnt/usr/lib:/mnt/usr/share/:/mnt/usr/local/lib/:/mnt/usr/lib/openmpi/lib/
注意:不设置目录连接库路径,编译出的qmake工具生成的Makefile文件中的LFLAGS选型 需要各个项目的pro使用QMAKE_LFLAGS单独配置。否则无法连接。
编译项配置
#!/bin/bash
./configure \
-prefix /root/qt/arm_lib \
-extprefix /root/qt/arm_lib \
-sysroot /mnt \
-xplatform linux-aarch64-gnu-g++ \
-pkg-config \
-release \
-opensource \
-confirm-license \
-icu \
-tslib \
-opengl \
-alsa \
-pulseaudio \
-no-mirclient \
-no-slog2 \
-qt-xcb \
-qt-freetype \
-qt-harfbuzz \
-qt-pcre \
-qt-zlib \
-qt-libpng \
-qt-libjpeg \
-qt-xkbcommon-x11
-sysroot 表示目标机的文件系统,交叉编译中的编译、连接需要目标机的依赖头文件和动态库
交叉编译中的 --sysroot 等等在编译时的作用 - 微信公众号--共鸣圈 - 博客园
制作文件系统建议使用sshfs
Ubuntu - sshfs 远程服务器目录挂载工具 - AI备忘录
挂载命令如下
sudo sshfs -o transform_symlinks -o follow_symlinks -o allow_other,default_permissions tyzc@192.168.35.157:/ /mnt
-o transform_symlinks 表示转换绝对链接符号为相对链接符号
-o follow_symlinks 沿用服务器上的链接符号
qtwebengine模块编译
环境库准备:
Ubuntu20.04编译QT5.14的qtwebengine过程,支持Mp4多媒体播放_vincehaha的博客-CSDN博客_ubuntu编译qtwebengine
当然装基础库也可将要的库写到一起格式如下
sudo apt-get install 库1 库2,这里做的目的提供安装效率。安装库不要犹豫,能安装则安装,毕竟减少排查的花费的时间。
sudo apt-get install bison build-essential gperf flex ruby python libasound2-dev libbz2-dev libcap-dev libcups2-dev libdrm-dev libegl1-mesa-dev libnss3-dev libpci-dev libpulse-dev libudev-dev libxtst-dev gyp ninja-build libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libfontconfig1-dev libxss-dev libwebp-dev libjsoncpp-dev libopus-dev libminizip-dev libavutil-dev libavformat-dev libavcodec-dev libevent-dev libdbus-1-dev qtdeclarative5-private-dev qtbase5-private-dev
缺少对应的库按照如下寻找:
libm.a和libm.so怎么装? - Ubuntu中文论坛
二次梳理rk3399 linux ubuntu平台缺失库
sudo apt-get install libc6-dev
sudo apt-get install libdbus-1-dev
sudo apt-get install libudev-dev
sudo apt-get install libdlm-dev
sudo apt-get install libglib2.0-dev
sudo apt-get install libdouble-conversion-dev
sudo apt-get install libssl1.0-dev
sudo apt-get install libbluetooth-dev
sudo apt-get install libasound2-dev
sudo apt-get install libopenal-dev
sudo apt-get install libatspi2.0-dev
sudo apt-get install libgegl-dev
sudo apt-get install libxi-dev
sudo apt-get install libgbm-dev
sudo apt-get install libatspi2.0-dev
sudo apt-get install libegl1-mesa-dev
sudo apt-get install libinput-dev
sudo apt-get install libmtdev-dev
sudo apt-get install libxkbcommon-dev
sudo apt-get install libcups2-dev
sudo apt-get install libgypsy-dev
sudo apt-get install libgstreamer1.0-dev
sudo apt-get install libgstreamer0.10-dev
sudo apt-get install roger-router-cli
sudo apt-get install ninja-build
sudo apt-get install libopus-dev
sudo apt-get install libwebp-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libharfbuzz-dev
sudo apt-get install libfontconfig1-dev
sudo apt-get install libjpeg9-dev / sudo apt-get install libjpeg62-dev
sudo apt-get install libpng12-dev
sudo apt-get install libxcb1-dev
sudo apt-get install libgl-dev
sudo apt-get install libwayland-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libraspberrypi-dev
sudo apt-get install libx11-xcb-dev
sudo apt-get install libdrm-dev
sudo apt-get install libxcb-glx0-dev
sudo apt-get install freetds-dev
sudo apt-get install libassimp-dev
sudo apt-get install libre2-dev
运行之后,Qt本身会检测你当前环境是否能满足对应模块要求,会产生一个config.log文件如下: 想问这个终端工具叫什么请细细看下图 可以看到哦
学会看这个文件 要减少你搜索的时间。。。。。。。
上图编译命令是g++不通过, 十有八九是你没有安装库,当然你可能安装了当时编译时默认搜索的路径 感知不到。查看编译器头文件默认路径如下:
echo 'main(){}'|aarch64-linux-gnu-g++ -E -v -
找不到头文件库文件的 可能都是不在对应的路径下。
如果你是交叉编译,可以先使用本地编译器g++验证一下是否能编译 ,证明本机上有对应的头文件只要你cp一下到对应路径即可,若是库找不到,请在arm平台上找。千万记住。
apt-get install libre2-dev
上命令是解决 re2的缺失
ICU二进制库
https://github.com/unicode-org/icu/releases
https://doc.qt.io/qt-5/windows-requirements.html
Compiling-ICU-with-MinGW - Qt Wiki
编译命令
./runConfigureICU -h
./runConfigureICU Linux/gcc
make
make install
默认安装到/usr/local 需要移动到/usr下/bin、include、lib 请仔细 涉及到 pkgconfig 测试发现涉及的库 55 70 68版本
编译完成,Qt还是检测没有icu库,查看config.log有如下错误
该函数所在的库 -licui18n一看没有软连接 这样写实际系统认识的库名称为libicui18n.so。坑逼。。。。。我浪费了一个小时啊
交叉编译 qtwebengine最终编译成果
配置环境宿主机编译环境
OSError: [Errno 2] No such file or directory
安装以下几个库:
apt-get install gperf flex bison
编译命令
目录/qmake -o Makefile qtwebengine.pro
单独设置两个环境变量
单独编译模块由于没有configure文件,依赖的头文件/库都得通过pkg-config寻找
export PKG_CONFIG_LIBDIR=/mnt/usr/lib/pkgconfig:/mnt/usr/share/pkgconfig:/mnt/usr/lib/aarch64-linux-gnu/pkgconfig:/mnt/usr/lib/openmpi/lib/pkgconfig:/mnt/usr/local/lib/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=/mnt
这里会给出明确的提示需要什么。可以根据具体提示下载源码包或者使用apt-get install命令( 优先选择)。
这里给一个排除依赖库找不到的方法
这里要主要PKG_CONFIG_LIBDIR和目标机上有所不同了。
export PKG_CONFIG_LIBDIR=/mnt/usr/lib/pkgconfig:/mnt/usr/share/pkgconfig:/mnt/usr/lib/aarch64-linux-gnu/pkgconfig:/mnt/usr/lib/openmpi/lib/pkgconfig:/mnt/usr/local/lib/pkgconfig