近期有师弟问我国产OS安装Qt5.15编译老是不完整,不是没声音,就是没视频,或者没有xcb。通过QEMU模拟Arm64,闲来20几天摸索,完整编译了Qt5.15,并编译成功了我的SDR玩具taskBus。
1.主要结论:
- 该OS内核太老,5.4,gcc 9, Qt6.2以上的基本很难。还是退回 Qt 5.15 好一些。
- 想编译 5.15,先安装 5.12,这样可以凑齐很多包。
在编译过程中,还有一些做法,值得记录。
1.1 使用 recheck 不断凑齐缺失的包
首先 configure 的时候,会缺少很多包。安装相应的包后,要使用 -recheck 选项(Qt5有,Qt6没有)触发重新检查,才能生效。
./configure -xcb -prefix /usr/local/qt/5.15 -sql-psql -sql-mysql -sql-sqlite -gstreamer 1.0 -sql-tds -recheck
直到确保包check通过后,再运行1次不带 recheck的版本。否则,在随后 make install时会再次触发configure,导致重新编译。
1.2 解决时戳冲突导致的重新编译
在qemu虚拟化下,可能出现configure时的时间和make时的时间错位,导致重新编译。每次完整编译,意味着1天的开销。
如果确定其实所有的包已经编译好了,则完全可以通过touch重置所有时戳,同时解决 make 、sudo make install 导致的文件权属问题。
首先准备bash脚本 lstouch.sh 并赋予x属性。
#!/bin/bash
echo $1
chown user:user $1
touch -t 202502010102.03 $1
而后运行:
sudo find . | xargs -I {} -P 6 ./lstouch.sh {}
即可重置所有文件为1个时刻。由于make检查是否要重新编译,并不检查等于符号,Makefile的日期和obj的日期完全相同,则不会编译。
2. 附件:安装的包
我把history里曾经安装的包列举如下。感谢deepSeek,后两列是采用deepSeek生成的。
要注意的是,还有cups的不少dev包是用 dkpg 单独安装的,因为国产OS的默认mirror的dev版本和实际的工具版本不匹配,导致无法apt安装(也是醉了)。
包名 | 用途 | 官网 |
---|---|---|
bison | 语法分析器生成器 | https://www.gnu.org/software/bison/ |
build-essential | 编译工具集合 | https://packages.debian.org/build-essential |
clang-format | C++代码格式化工具 | https://clang.llvm.org/docs/ClangFormat.html |
clang-tidy | C++代码静态分析工具 | https://clang.llvm.org/extra/clang-tidy/ |
clang-tools | Clang工具集合 | https://clang.llvm.org/ |
clazy | Qt/C++代码静态分析工具 | https://github.com/KDE/clazy |
cmake | 跨平台构建工具 | https://cmake.org/ |
filezilla | FTP客户端 | https://filezilla-project.org/ |
firebird3.0-server | Firebird数据库服务器 | https://firebirdsql.org/ |
firebird-dev | Firebird开发库 | https://firebirdsql.org/ |
flex | 词法分析器生成器 | https://github.com/westes/flex |
flite1-dev | 语音合成开发库 | https://github.com/festvox/flite |
freetds-dev | FreeTDS开发库 | https://www.freetds.org/ |
g++ | GNU C++编译器 | https://gcc.gnu.org/ |
gcc | GNU C编译器 | https://gcc.gnu.org/ |
gdb | GNU调试器 | https://www.gnu.org/software/gdb/ |
geany | 轻量级IDE | https://www.geany.org/ |
git | 分布式版本控制系统 | https://git-scm.com/ |
git-gui | Git图形界面 | https://git-scm.com/ |
gitk | Git提交历史查看器 | https://git-scm.com/ |
Gperf | 哈希函数生成器 | https://www.gnu.org/software/gperf/ |
gqrx-sdr | SDR接收器软件 | https://gqrx.dk/ |
grass | 地理信息系统 | https://grass.osgeo.org/ |
grass-dev | GRASS GIS开发库 | https://grass.osgeo.org/ |
grass-gui | GRASS GIS图形界面 | https://grass.osgeo.org/ |
gstreamer1.0-qt5 | GStreamer Qt5集成 | https://gstreamer.freedesktop.org/ |
htop | 交互式系统监视器 | https://htop.dev/ |
isag | 系统活动报告工具 | https://packages.debian.org/isag |
lib3ds-dev | 3DS文件格式开发库 | https://github.com/lib3ds/lib3ds |
libalsaplayer-dev | ALSA音频播放开发库 | https://packages.debian.org/libalsaplayer-dev |
libarchive-dev | 压缩文件开发库 | https://www.libarchive.org/ |
libasound2-dev | ALSA声音开发库 | https://www.alsa-project.org/ |
libatspi2.0-dev | 辅助技术开发库 | https://developer.gnome.org/atspi/ |
libavcodec-dev | FFmpeg编解码开发库 | https://ffmpeg.org/ |
libavformat-dev | FFmpeg格式开发库 | https://ffmpeg.org/ |
libav-tools | FFmpeg多媒体工具 | https://ffmpeg.org/ |
libbluetooth-dev | 蓝牙开发库 | https://www.bluez.org/ |
libclang-10-dev | Clang 10开发库 | https://clang.llvm.org/ |
libdbus-1-dev | D-Bus开发库 | https://www.freedesktop.org/wiki/Software/dbus/ |
libdbus-cpp-dev | D-Bus C++开发库 | https://github.com/dbus-cxx/dbus-cxx |
libdrm-dev | DRM开发库 | https://dri.freedesktop.org/ |
libevent-dev | 事件通知开发库 | https://libevent.org/ |
libfftw3-dev | 快速傅里叶变换开发库 | https://www.fftw.org/ |
libfontconfig1-dev | 字体配置开发库 | https://www.freedesktop.org/wiki/Software/fontconfig/ |
libfreetype6-dev | 字体渲染开发库 | https://www.freetype.org/ |
libgdal-grass | GDAL GRASS插件 | https://gdal.org/ |
libghc-double-conversion-dev | Haskell双精度转换开发库 | https://hackage.haskell.org/package/double-conversion |
libgl1-mesa-dev | Mesa OpenGL开发库 | https://www.mesa3d.org/ |
libglu1-mesa-dev | Mesa GLU开发库 | https://www.mesa3d.org/ |
libgstreamer1.0-dev | GStreamer开发库 | https://gstreamer.freedesktop.org/ |
libgstreamermm-1.0-dev | GStreamer C++开发库 | https://gstreamer.freedesktop.org/ |
libharfbuzz-bin | HarfBuzz文本 shaping工具 | https://harfbuzz.github.io/ |
libharfbuzz-dev | HarfBuzz文本 shaping开发库 | https://harfbuzz.github.io/ |
libiconv-hook-dev | 字符编码转换开发库 | https://www.gnu.org/software/libiconv/ |
libicu-dev | Unicode开发库 | https://icu.unicode.org/ |
libicu-le-hb-dev | ICU HarfBuzz开发库 | https://icu.unicode.org/ |
libiio-dev | 工业I/O开发库 | https://analogdevicesinc.github.io/libiio/ |
libinput-dev | 输入设备开发库 | https://www.freedesktop.org/wiki/Software/libinput/ |
libjson-perl | JSON Perl模块 | https://metacpan.org/pod/JSON |
libmd4c-dev | Markdown解析开发库 | https://github.com/mity/md4c |
libmysqlclient-dev | MySQL客户端开发库 | https://dev.mysql.com/ |
libnss3-dev | NSS开发库 | https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS |
libopenal-dev | OpenAL音频开发库 | https://openal.org/ |
libopusfile-dev | Opus音频文件开发库 | https://opus-codec.org/ |
libpcap-dev | 网络数据包捕获开发库 | https://www.tcpdump.org/ |
libpq-dev | PostgreSQL开发库 | https://www.postgresql.org/ |
libqt5bluetooth5 | Qt5蓝牙模块 | https://www.qt.io/ |
libqt5charts5-dev | Qt5图表开发库 | https://www.qt.io/ |
libqt5datavisualization5-dev | Qt5数据可视化开发库 | https://www.qt.io/ |
libqt5gamepad5-dev | Qt5游戏手柄开发库 | https://www.qt.io/ |
libqt5gstreamer-dev | Qt5 GStreamer开发库 | https://www.qt.io/ |
libqt5location5-plugins | Qt5定位插件 | https://www.qt.io/ |
libqt5multimedia5-plugins | Qt5多媒体插件 | https://www.qt.io/ |
libqt5networkauth5-dev | Qt5网络认证开发库 | https://www.qt.io/ |
libqt5positioning5-plugins | Qt5定位插件 | https://www.qt.io/ |
libqt5remoteobjects5-dev | Qt5远程对象开发库 | https://www.qt.io/ |
libqt5sensors5-dev | Qt5传感器开发库 | https://www.qt.io/ |
libqt5serialbus5-dev | Qt5串行总线开发库 | https://www.qt.io/ |
libqt5serialbus5-plugins | Qt5串行总线插件 | https://www.qt.io/ |
libqt5serialport5-dev | Qt5串口开发库 | https://www.qt.io/ |
libqt5sql5-ibase | Qt5 InterBase数据库驱动 | https://www.qt.io/ |
libqt5sql5-mysql | Qt5 MySQL数据库驱动 | https://www.qt.io/ |
libqt5sql5-odbc | Qt5 ODBC数据库驱动 | https://www.qt.io/ |
libqt5sql5-psql | Qt5 PostgreSQL数据库驱动 | https://www.qt.io/ |
libqt5sql5-tds | Qt5 TDS数据库驱动 | https://www.qt.io/ |
libqt5svg5-dev | Qt5 SVG开发库 | https://www.qt.io/ |
libqt5texttospeech5-dev | Qt5文本转语音开发库 | https://www.qt.io/ |
libqt5-ukui-style-dev | Qt5 UKUI风格开发库 | https://www.qt.io/ |
libqt5virtualkeyboard5-dev | Qt5虚拟键盘开发库 | https://www.qt.io/ |
libqt5webchannel5-dev | Qt5 WebChannel开发库 | https://www.qt.io/ |
libqt5webengine5 | Qt5 WebEngine模块 | https://www.qt.io/ |
libqt5websockets5-dev | Qt5 WebSockets开发库 | https://www.qt.io/ |
libqt5webview5-dev | Qt5 WebView开发库 | https://www.qt.io/ |
libqt5x11extras5-dev | Qt5 X11扩展开发库 | https://www.qt.io/ |
libqtspell-qt5-dev | Qt5拼写检查开发库 | https://github.com/manisandro/qtspell |
libqwt-qt5-dev | Qt5图表开发库 | https://qwt.sourceforge.io/ |
libre2-dev | RE2正则表达式开发库 | https://github.com/google/re2 |
libsdl2-dev | SDL2开发库 | https://www.libsdl.org/ |
libsnappy-dev | Snappy压缩开发库 | https://github.com/google/snappy |
libspeechd-dev | 语音合成开发库 | https://freebsoft.org/speechd |
libssl-dev | SSL安全套接字开发库 | https://www.openssl.org/ |
libuhd-dev | UHD开发库 | https://files.ettus.com/manual/ |
libvpx-dev | VP8/VP9视频编解码开发库 | https://www.webmproject.org/ |
libx11-dev | X11开发库 | https://www.x.org/ |
libx11-xcb-dev | X11-XCB开发库 | https://www.x.org/ |
libxcb1-dev | XCB开发库 | https://xcb.freedesktop.org/ |
libxcb-composite0-dev | XCB复合扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-cursor-dev | XCB光标开发库 | https://xcb.freedesktop.org/ |
libxcb-damage0-dev | XCB损坏扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-dpms0-dev | XCB DPMS扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-dri2-0-dev | XCB DRI2扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-dri3-dev | XCB DRI3扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-ewmh-dev | XCB EWMH扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-glx0-dev | XCB GLX扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-icccm4-dev | XCB ICCCM扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-image0-dev | XCB图像扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-imdkit-dev | XCB输入法开发库 | https://github.com/fcitx/xcb-imdkit |
libxcb-keysyms1-dev | XCB键符号开发库 | https://xcb.freedesktop.org/ |
libxcb-present-dev | XCB Present扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-randr0-dev | XCB RandR扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-record0-dev | XCB Record扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-render-util0-dev | XCB渲染工具开发库 | https://xcb.freedesktop.org/ |
libxcb-res0-dev | XCB资源扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-screensaver0-dev | XCB屏幕保护扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-shape0-dev | XCB形状扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-shm0-dev | XCB共享内存扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-sync-dev | XCB同步扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-util-dev | XCB工具开发库 | https://xcb.freedesktop.org/ |
libxcb-xf86dri0-dev | XCB XF86DRI扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-xfixes0-dev | XCB XFixes扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-xinerama0-dev | XCB Xinerama扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-xinput-dev | XCB XInput扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-xkb-dev | XCB XKB扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-xrm-dev | XCB X资源管理开发库 | https://github.com/Airblader/xcb-util-xrm |
libxcb-xtest0-dev | XCB XTest扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-xv0-dev | XCB XVideo扩展开发库 | https://xcb.freedesktop.org/ |
libxcb-xvmc0-dev | XCB XVideo MC扩展开发库 | https://xcb.freedesktop.org/ |
libxcomposite-dev | X Composite扩展开发库 | https://www.x.org/ |
libxcursor-dev | X光标开发库 | https://www.x.org/ |
libxdamage-dev | X损坏扩展开发库 | https://www.x.org/ |
libxext-dev | X扩展开发库 | https://www.x.org/ |
libxfixes-dev | X Fixes扩展开发库 | https://www.x.org/ |
libxi-dev | X输入扩展开发库 | https://www.x.org/ |
libxkbcommon-dev | XKB通用开发库 | https://xkbcommon.org/ |
libxkbcommon-x11-dev | XKB X11开发库 | https://xkbcommon.org/ |
libxkbfile-dev | XKB文件开发库 | https://www.x.org/ |
libxrandr-dev | X RandR扩展开发库 | https://www.x.org/ |
libxrender-dev | X渲染扩展开发库 | https://www.x.org/ |
libxshmfence-dev | X共享内存栅栏开发库 | https://www.x.org/ |
libxtst-dev | X测试扩展开发库 | https://www.x.org/ |
libzstd-dev | Zstandard压缩开发库 | https://facebook.github.io/zstd/ |
lzip | Lzip压缩工具 | https://www.nongnu.org/lzip/ |
lzma-dev | LZMA压缩开发库 | https://tukaani.org/xz/ |
mc | Midnight Commander文件管理器 | https://midnight-commander.org/ |
nano | 文本编辑器 | https://www.nano-editor.org/ |
ncompress | 压缩工具 | https://packages.debian.org/ncompress |
ninja-build | Ninja构建系统 | https://ninja-build.org/ |
nodejs | Node.js JavaScript运行时 | https://nodejs.org/ |
npm | Node.js包管理器 | https://www.npmjs.com/ |
Openssh | SSH客户端和服务器 | https://www.openssh.com/ |
Partitionmanager | 分区管理工具 | https://www.kde.org/applications/system/partitionmanager/ |
perl | Perl编程语言 | https://www.perl.org/ |
pgadmin3 | PostgreSQL管理工具 | https://www.pgadmin.org/ |
postgis | PostGIS地理信息系统 | https://postgis.net/ |
postgis-gui | PostGIS图形界面 | https://postgis.net/ |
postgresql | PostgreSQL数据库 | https://www.postgresql.org/ |
python3-html5lib | Python HTML5解析库 | https://github.com/html5lib/html5lib-python |
python3-pip | Python包管理工具 | https://pip.pypa.io/ |
python3-rpy2 | Python R语言接口 | https://rpy2.github.io/ |
python3-termcolor | Python终端颜色库 | https://pypi.org/project/termcolor/ |
qgis | QGIS地理信息系统 | https://qgis.org/ |
qt5-default | Qt5默认开发包 | https://www.qt.io/ |
qt5keychain-dev | Qt5密钥管理开发库 | https://github.com/frankosterfeld/qtkeychain |
qt5-style-plugins | Qt5风格插件 | https://www.qt.io/ |
qtbase5-examples | Qt5基础示例 | https://www.qt.io/ |
qtcharts5-examples | Qt5图表示例 | https://www.qt.io/ |
qtcreator | Qt集成开发环境 | https://www.qt.io/ |
qtdatavisualization5-examples | Qt5数据可视化示例 | https://www.qt.io/ |
qtdeclarative5-dev | Qt5声明式开发库 | https://www.qt.io/ |
qtlocation5-dev | Qt5定位开发库 | https://www.qt.io/ |
qtmultimedia5-dev | Qt5多媒体开发库 | https://www.qt.io/ |
qtmultimedia5-examples | Qt5多媒体示例 | https://www.qt.io/ |
qtpositioning5-dev | Qt5定位开发库 | https://www.qt.io/ |
qtquickcontrols2-5-dev | Qt5 Quick Controls 2开发库 | https://www.qt.io/ |
qttools5-dev | Qt5工具开发库 | https://www.qt.io/ |
qtwebengine5-dev | Qt5 WebEngine开发库 | https://www.qt.io/ |
qtwebengine5-examples | Qt5 WebEngine示例 | https://www.qt.io/ |
ruby | Ruby编程语言 | https://www.ruby-lang.org/ |
saga | SAGA地理信息系统 | https://saga-gis.org/ |
screen | 终端多路复用器 | https://www.gnu.org/software/screen/ |
speech-dispatcher | 语音合成服务 | https://freebsoft.org/speechd |
speech-dispatcher-flite | Flite语音合成插件 | https://freebsoft.org/speechd |
sqlite | SQLite数据库 | https://www.sqlite.org/ |
uhd-soapysdr | UHD SoapySDR支持 | https://github.com/pothosware/SoapyUHD |
unrar | RAR解压工具 | https://www.rarlab.com/ |
valgrind | 内存调试工具 | https://valgrind.org/ |
wireshark | 网络协议分析工具 | https://www.wireshark.org/ |
xarchiver | 压缩文件管理器 | https://github.com/ib/xarchiver |
zstd | Zstandard压缩工具 | https://facebook.github.io/zstd/ |
3. 遗留问题
之所以花了20多天,就是因为默认的仓库缺乏维护,导致了不一致的版本(lib和lib-dev的版本冲突)。而基于x86的qemu模拟arm64如蜗牛一样,每个试错都会花费很久。
而我在OS的论坛提问,有朋友提醒我,卸载cups,安装开源的版本,会失去对国产打印机的支持。所以,相当于问题还没有完全解决。Webengine以及一些模块依赖cups,这是一个大问题。