國產平台中 自己編譯鏈接 qt 搭建開發環境 最全記錄



轉至元數據結尾

一、關於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.csdn.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.csdn.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 問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM