Ubuntu16下編譯Qt4.8.3原始碼
編譯的環境:
- Ubuntu16.04.7
- GCC-4.9
- Qt4.8.3
首先貼出Qt原始碼的下載地址https://download.qt.io/archive/qt/,這個網站相對國內的鏡像站更全(鏡像站似乎沒有Qt4原始碼),但是缺點是比較慢,有梯子的話應該會更快,
下面就可以在本地計算機上進行編譯相關的操作了,在這里我將下載好的原始碼放在$HOME/Downloads路徑下,大家可以根據自己的實際情況進行相關的修改,
解壓原始碼壓縮包
這里可以使用系統自帶的GUI解壓工具解壓,也可以在終端中使用命令解壓,終端中解壓命令為:
tar -zxvf qt-everywhere-opensource-src-4.8.3.tar.gz
cd qt-everywhere-opensource-src-4.8.3
解壓后,使用cd命令進入解壓后的路徑,后續的主要操作都在這個目錄下進行,
安裝依賴項
這里需要安裝的依賴項很多,如果有模塊不需要安裝,則可以不安裝相關依賴,不過這里推薦全部安裝,萬一以后會用到呢,
sudo apt install -y gcc-4.9 g++-4.9 make cmake gdb build-essential
sudo apt install -y libx-dev libxext-dev libxtst-dev
sudo apt install -y openssl libssl-dev
sudo apt install -y g++-multilib zlib1g-dev autoconf automake libtool
sudo apt install -y libgl1-mesa-dev libglu1-mesa-dev
sudo apt install -y libglib2.0-dev
sudo apt install -y xorg-dev gperf bison flex sqlite
sudo apt install -y libxrender-dev libxrandr-dev libedbus-dev libdbus-1-dev
sudo apt install -y libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libalsa-ocaml-dev
sudo apt install -y libxt-dev subversion libsqlite3-dev libpng12-dev
# 64位機器
sudo apt install -y lib32ncurses5 lib32z1
# 32位機器
sudo apt install -y libx32ncurses5 libx32z1
修改相關檔案
這里是Qt能否編譯成功的關鍵所在,主要有3個地方需要修改,我將一一說明,
-
將系統默認的GCC/G++命令鏈接到剛剛安裝的4.9版本的GCC中,需要這一步的原因是,GCC5以上的GCC是始終無法打開WebKit編譯選項的,所以如果需要WebKit就需要更換到4.9版本的GCC,
# 建立gcc和g++的軟鏈接 sudo ln -sf /usr/bin/gcc-4.9 /usr/bin/gcc sudo ln -sf /usr/bin/g++-4.9 /usr/bin/g++ -
將GCC的C++編譯版本調整為C++98標準,默認情況下,編譯器似乎是啟用了C++11標準,將會出現很多奇怪的錯誤,例如
narrowing conversion相關的錯誤,這里需要修改兩個檔案的CXX_FLAGS,# mkspecs/common/g++-base.conf 第18行 QMAKE_CXX = g++ 改為 QMAKE_CXX = g++ -std=gnu++98 # mkspecs/common/gcc-base.conf 第45行 QMAKE_CXXFLAGS += $$QMAKE_CFLAGS 改為 QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -std=gnu++98 -
修改JavaScriptCore.pri檔案中的內容,這個檔案和WebKit編譯相關,修改之后WebKit才能編譯通過,具體的鏈接在這里,這是WebKit的一個bug,
sed -i -e '/CONFIG\s*+=\s*text_breaking_with_icu/ s:^#\s*::' \ src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri
到這里,編譯Qt4最關鍵的部分就完成了,
編譯相關
Qt在默認情況下編譯的是元件,也可以通過添加-static選項編譯靜態庫,但是編譯靜態庫是無法啟用WebKit的,(我也嘗試編譯了靜態庫,死在了最終鏈接的時候)
編譯的流程是先通過configure生成Makefile檔案,然后使用make編譯,最終install,具體命令如下:
./configure -opensource -nomake demos -nomake examples -nomake tests -silent -webkit
make -j4
sudo make install
其中,-nomake選項關閉了Qt例子和測驗,這樣可以節省編譯的時間,有需要的可以打開,
我使用的編譯平臺是:Intel Core i3-2350M+DDR3-1333MHz 6GB,編譯全程耗時大概40分鐘左右,如果你的機器更好可以更改make -j4后面的數字,默認情況下,安裝路徑為:/usr/loca/Trolltech/Qt-4.8.3,如果需要自定義的話,可以在configure的時候使用-prefix選項進行修改,這里我使用的是默認安裝路徑,
添加環境變數
在編譯安裝完成后,我們在終端中輸入qmake,會發現仍未找到相關命令或者并不是我們需要的4.8.3版本,這是因為還需要在系統中添加環境變數才可以使我們自行安裝的Qt生效,這里我選擇的是更改$HOME/.bashrc檔案,這個檔案是當前賬戶bash環境的環境變數控制檔案,使用zsh的在$HOME/.zshrc檔案中進行相關修改即可,
在環境變數檔案的最后添加下面四行:
export PATH="/usr/loca/Trolltech/Qt-4.8.3/bin:$PATH"
export LD_LIBRARY_PATH="/usr/loca/Trolltech/Qt-4.8.3/lib:$LD_LIBRARY_PATH"
export MANPATH="/usr/loca/Trolltech/Qt-4.8.3/man:$MANPATH"
export PKG_CONFIG_PATH="/usr/loca/Trolltech/Qt-4.8.3/lib/pkgconfig:$PKG_CONFIG_PATH"
稍微解釋下每一個變數是干什么的:PATH主要負責可執行路徑,LD_LIBRARY_PATH負責庫檔案,MANPATH負責終端檔案,PKG_CONFIG_PATH負責pkgconfig檔案配置,
總結
到這里,整個Qt4.8.3編譯安裝配置都完成了,其實看上去也沒啥作業量,但是一開始嘗試編譯的時候各種報錯還是挺難受的,我將我遇到的問題和解決方法整理在這里,歡迎討論和私信我,我會盡量及時回復,
下一期將介紹FFMpeg編譯的相關流程,敬請期待吧,😃
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229339.html
標籤:其他
下一篇:linux命令---小白筆記
