国产平台中 自己编译链接 qt 搭建开发环境 最全记录 - 不断学习中渐渐不彷徨

时间:2024-04-14 22:39:38


转至元数据结尾

一、关于Qt 源码的编译以及注意事项

 

注意 如果是在适配麒麟990(arm64) 的cpu请先参看第四点......

 

首先 利用uos中的网络软件源 下载好对应的 开发软件如 :

git   cmake   conan   python  python3  pip  pip3  gcc (目前都是 8.3.0)  g++ (目前都是 8.3.0)  等工具   

(   pip   pip3:  ------>

sudo apt-get install python-pip
sudo apt-get install python3-pip

//下面两句直接将 conan 安装后添加到环境变量
pip install --user <username>
source ~/.profile

)

接着 下载 四个 qtphantompdf 项目要用到 的依赖库 以及 自身仓库。

git@gitlab.foxitsoftware.com:foxit/phantom/component/AgnosticUILib.git

git@gitlab.foxitsoftware.com:foxit/phantom/windows/agnosticuiressyn.git

git@gitlab.foxitsoftware.com:foxit/phantom/macos/qtphantompdf.git

git@gitlab.foxitsoftware.com:foxit/phantom/macos/qtresources.git

 

 

 

详细 资料我参考了 下面这篇文章 以及 Qt 官方的一些资料

https://blog.****.net/lang523493505/article/details/105107788

https://wiki.qt.io/Building_Qt_5_from_Git

在编译源码前 注意先按照 上方的两个链接里说明的 安装好 相关的系统依赖库。

这里 我不仅下载 了 qt5.12.3 版本 还安装了 uos 官方提供的(这部分废除直接使用 祖力他们收集的 qt 源码基础上改造的5.12.3 的库)

https://gitlab.foxitsoftware.com/foxit/phantom/macos/qtresources

 

uos/kylin 下解决依赖关系 用 aptitude 更加强大

qt5.11 版本的默认开发库 ,利用如下命令 (目前在 华为擎云 kylin990 机子上 qt5 默认安装版本是 5.15 )

sudo  apt-get install  qt5-default

 

编译qt的 依赖库 可以参考如下链接

https://note.youdao.com/s/EMnUDMAj   

得补充安装  如下:

野野的有道云笔记

 

这里需要注意下 由于最新的 Linux Editor 含有 speech 发言功能 ,需要依赖外部库 ,以下三个库参考 也得装上 再编译qt

Speech Dependencies

Qt Speech depends on Speech Dispatcher (libspeechd) on the Linux platform. The following development packages should be installed:

  • flite1-dev
  • libspeechd-dev
  • speech-dispatcher

 

其他详细的依赖库信息 参看如下

https://doc.qt.io/qt-5/linux-requirements.html

https://doc.qt.io/qt-5/qtwebengine-platform-notes.html

 

编译完成后对 qt配置结果的 build.log 如下 build-5.12.3.log

编译安装完成后对 qt 安装结果 install-5.12.3  如下 install-5.12.3.log

 

 

如果为了开发方便 建议 利用 源码 再次编译 一份纯静态库 版本  (./configure  -static )   和    debug版本的qt5.12.3 (./configure  -debug) 

然后编译安装后  ,在qtcreator里 选择对应安装位置 ,便于 qt版本切换 ,以利于开发

 

以下来自 南野野

参考链接:
1. Building Qt 5 from Git
2. Building Qt Sources
3. Qt for Linux/X11 - Building from Source
4. Qt Configure Options
5. Qt源码编译configure参数列表
6. wget 软件下载

config :sh ../build-5.12.3.sh 2>&1 | tee build-5.12.3.log
make : make -j4 2>&1 | tee make-5.12.3.log

 

 

 

二、关于系统虚拟打印功能 

uos下 为了 测试打印 相关功能的移植 情况 ,并且避免 浪费打印纸张 油墨等资源 ,这边需要安装 下 相关的

系统提供的虚拟打印 功能

参考 链接如下

https://blog.****.net/h106140873/article/details/115597084

 

可能是由于系统更新的缘故

目前想要安装 系统打印机 使用如下命令

sudo apt-get install printer-driver-cups-pdf

 

安装完毕后 会在 打印管理页面里 看到虚拟打印机,如下:(第四项 即为虚拟打印机)

后续在 pdf  editor 里面可以直接使用 选择虚拟打印机 进行打印 成 pdf文档 以验证打印的效果

可以通过修改/etc/cups/cups-pdf.conf文件的OUT参数来设置pdf的输出位置:

Out ${HOME}/PDF //这是默认位置。


三、移植qt webengine 模块时 遇到的一些问题 以及相关的解决方法 ,来自南野野

 

可能遇到的问题及解决方案:


1.ninja相关报错
在configure或者make时如果碰到ninja相关报错,首先检查configure或者make日志,搜索关键字error或者failed,找到后先排除是否为缺失三方库,排除库缺失可能性后,看是否有"Ninja version too old"报错信息,如果有,执行如下操作
1.进入到qt-src-5.12.3/qtwebengine/src/3rdparty/ninja路径下,执行./configure.py --bootstrap,如果报错含有"re2c"相关,则需要安装ninja依赖的三方库re2c(sudo apt-get install re2c),然后再执行”./configure.py --bootstrap“,生成可执行文件后sudo cp ./ninja /usr/bin(记得先备份下系统自带的ninja,sudo cp /usr/bin/ninja /usr/bin/ninja-1.10.0),然后再重新执行Qt build脚本即可,此时config.summary文件中use system ninja才会变成yes


查看ninja版本: ninja --version

视情况安装ninja
KylinOS 自带ninja版本为1.10.0 (ninja --version),而qt源码中(qt-src-5.12.3/qtwebengine/src/3rdparty/ninja)带的版本为1.8.2
1. sudo apt-get install re2c
2. ./configure.py --bootstrap
使用系统自带的ninja(1.10.0)会报“Ninja version too old”,解决办法是使用qt源码目录下的ninja(1.8.2)源码编译出的可执行文件
拷贝至/usr/bin,此时config.summary文件中use system ninja才会变成yes


2.报错”error \'SIOCGSTAMP\' was not declared in this scope did you mean \'SIOCSARP\'“时:
0
需修改源码,依据为https://bugreports.qt.io/browse/QTBUG-76957
../qtserialbus/src/plugins/canbus/socketcan/socketcanbackend.cpp 添加#include <linux/sockios.h>既可make通过


0
需修改源码,依据为https://bugreports.qt.io/browse/QTBUG-76963
/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/physicalsocketserver.cc 添加#include <linux/sockios.h>既可make通过


3.碰到如下webengine模块中pulse子模块pulse_stubs.cc文件相关报错
0


问题原因:pulseaudio-12.99.1 breaks qtwebengine build


方案1:(貌似不可行)
修改
../qtwebengine/src/3rdparty/chromium/media/audio/pulse/pulse.sigs
../qtwebengine/src/3rdparty/chromium/media/audio/pulse/pulse_stub_header.fragment
修改内容
https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/279353


方案2:
安装低版本pulseaudio
wget https://www.freedesktop.org/software/pulseaudio/releases/pulseaudio-12.2.tar.xz tar -xvhf pulseaudio-12.2.tar.xz cd pulseaudio-12.2/ sudo apt-get install intltool sudo apt-get install libsndfile-dev ./configure make -j4 sudo make install pulseaudio --version
问题4:报错“./../../../../../qt-src-5.12.3/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/dom/document.cc:5487:5: error: expected ‘;’ before ‘if’
5487 | if (c == \':\') {
| ”


0


解决方案:
文件 ../qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/dom/document.cc5486行结尾添加分号(同文件5407行该函数已经加过分号)
0


问题4:
https://bugreports.qt.io/browse/QTBUG-76439

 

四、麒麟 kirin 990 华为擎云上适配系统环境遇到问题

1 、下列软件包有未满足的依赖关系:
 libxslt1-dev : 依赖: libxslt1.1 (= 1.1.32.2-1+deepin) 但是 1.1.32.3-1+dde 正要被安装
 libxslt1.1-dbgsym : 依赖: libxslt1.1 (= 1.1.32.2-1+deepin) 但是 1.1.32.3-1+dde 正要被安装
N: 忽略‘pgv-ppa.list.bak_1’(于目录‘/etc/apt/sources.list.d/’),鉴于它的文件扩展名无效
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

 

2、下列软件包有未满足的依赖关系:
 libfontconfig1-dev : 依赖: libfreetype6-dev (>= 2.8.1) 但是它将不会被安装
 libnss3-dev : 依赖: libnss3 (= 2:3.42.1.3-1+dde) 但是 2:3.42.1.4-1+dde 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

 

3、下列软件包有未满足的依赖关系:(影响低)
 libgstreamer-plugins-bad1.0-dev : 依赖: libopencv-dev (>= 2.3.0) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

 

 

(上诉问题 应该都是由于 系统默认安装的 配套源  相关系统软件版本冲突,包括qt的 版本冲突所致)

解决方法:

根据 uos技术支持 的提供的 方法重新修改  apt 的非 主仓库的 源位置 即可 (改成如下图所示  将官方源改成非稳定 版本 升级官方源)  (按照下图修正 这是之后几步操作的前提)

注意 特别提醒:对于华为擎云W515 台式机 ,如果这么做了 更新了 非稳定版本的源后 执行 apt update 后 ,千万不要执行  apt-get  upgrade 或者 点系统控制中心中的更新 。不要下载仓库里一个名叫 updateapp的包

那样的话会导致 下载安装固件包,是需要更换主板的 ..... 所以更新源后 就不要升级仓库了

 

 

针对上述的一些版本冲突问题 这里 根据uos 技术支持提供的 建议 对 已经安装的相关软件包进行降级处理(由于提示冲突的版本 与已经安装的 版本差别并不大,小版本差别),处理的对应包有:

 

可参考的命令如下:

sudo apt install  XXXXXXXX=XXXX版本的方式

apt policy libnss3=2:3.42.1.3-1+dde

 

libopenexr-dev : 依赖: libopenexr23 (= 2.2.1.1-1+dde) 但是 2.2.1.2-1+dde 正要被安装  (处理   libopenexr23 这个 使用  了 命令       sudo apt install libopenexr23=2.2.1.1-1+dde   <指明软件版本号>)

正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列软件包是自动安装的并且现在不需要了:
  golang-gir-gio-2.0-dev golang-gir-glib-2.0-dev golang-gir-gobject-2.0-dev golang-github-cryptix-wav-dev
  golang-github-gavv-monotime-dev golang-github-kr-pretty-dev golang-github-kr-pty-dev golang-github-kr-text-dev
  golang-github-linuxdeepin-go-x11-client-dev golang-github-mozillazg-go-pinyin-dev golang-golang-x-image-dev
  golang-golang-x-net-dev golang-golang-x-text-dev golang-golang-x-tools-dev golang-gopkg-check.v1-dev libatk-bridge2.0-dev
  libatk1.0-dev libcairo-script-interpreter2 libepoxy-dev libfribidi-dev libjpeg8 libpam0g-dev libpixman-1-dev
  multiarch-support pango1.0-tools wayland-protocols
使用\'sudo apt autoremove\'来卸载它(它们)。
下列软件包将被【降级】:
  libopenexr23
升级了 0 个软件包,新安装了 0 个软件包,降级了 1 个软件包,要卸载 0 个软件包,有 160 个软件包未被升级。
需要下载 539 kB 的归档。
解压缩后会消耗 0 B 的额外空间。

 

装完这个后 再安装下面这些之前报依赖错误的库

libopencv-calib3d-dev (= 3.2.0+dfsg-6+0eagle2) 但是它将不会被安装
                 依赖: libopencv-contrib-dev (= 3.2.0+dfsg-6+0eagle2) 但是它将不会被安装
                 依赖: libopencv-features2d-dev (= 3.2.0+dfsg-6+0eagle2) 但是它将不会被安装
                 依赖: libopencv-highgui-dev (= 3.2.0+dfsg-6+0eagle2) 但是它将不会被安装
                 依赖: libopencv-objdetect-dev (= 3.2.0+dfsg-6+0eagle2) 但是它将不会被安装
                 依赖: libopencv-stitching-dev (= 3.2.0+dfsg-6+0eagle2) 但是它将不会被安装
                 依赖: libopencv-videostab-dev (= 3.2.0+dfsg-6+0eagle2) 但是它将不会被安装

最后成功执行   sudo apt install libgstreamer-plugins-bad1.0-dev 操作

 

其他下面几个冲突的包也可以使用这种方式处理下

libfreetype6

libfreetype6-dev

libnss3

libxslt1-dev

libxslt1.1

libfontconfig1-dev

libnss3

 

确保后面 qt 环境可以顺利完满安装

 

安装系统时遇到几个库 相互依赖,并且此时每个库还需要特定版本时 ,可以为每个库指定版本进行安装例如:

sudo apt install       libudev1=245.4-4kylin3.11k1hw1              udev=245.4-4kylin3.11k1hw1  ......

 

五、底层库的利用 conan 进行下载的过程参照如下链接

依赖管理快速入门(Dependency Management Getting started)

 

六、arm64 cpu  linux 环境下遇到的   链接 openssl 库错误问题解决(kirin990 、FT2000/4 cpu 均有此问题)

 

在编译 AllPlugin.pro报错  插件管理工程时 ,由于需要用到 openssl 库 进行 链接

遇到了如下问题 

Invalid relocations when linking a static libcrypto to a shared object on arm64 linux。

具体编译报错 如下所示

 

参考下面的解决办法

https://github.com/openssl/openssl/issues/10842

https://github.com/openssl/openssl/pull/11464/files (最终方法)

 

https://github.com/openssl/openssl/commit/db42bb440e76399b89fc8ae04644441a2a5f6821

poly1305-armv8.pl  (这个文件是解决第二个报错用的 ) (openssl\crypto\poly1305\asm\poly1305-armv8.pl) (openssl\crypto\sha\asm)

 

 

 

 

 

这个说是两个reloction问题,刚才改两行代码解决第一个reloction R_AARCH64_PREL64;这个文件应该是解决第二个reloction R_AARCH64_ADR_PREL_LO21 问题