1. 程式人生 > 其它 >Qt交叉編譯整理的幾點說明

Qt交叉編譯整理的幾點說明

關於交叉編譯,對於初學者來說是個極難跨過去的砍(一旦跨過去了,以後遇到需要交叉編譯的時候都是順水推舟、信手拈來。),因為需要搭建交叉編譯環境,好在現在廠家提供的板子基本上都是測試好的環境,尤其是提供的編譯器,不用自己再去折騰,按照官方手冊來基本上不會有啥的的問題。

  • 在linux系統上編譯ffmpeg和qt都是非常簡單的事情,初學者也會,前提只要本地的gcc g++編譯器正常。
  • 任何編譯器包括嵌入式編譯器,為了確保環境正常,你可以先檢視對應的編譯器版本是否ok,g++ -v arm-linux-g++ -v。
  • 交叉編譯器檢視版本 /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++ -v 。
  • 編譯器位數和作業系統位數有關,一般32位的編譯器要在32位的系統上做交叉編譯,雖然32位也可以在安裝依賴後,在64位系統做交叉編譯,但是個人不建議,可能會出問題。64位的編譯器只能在64位的系統。
  • 設定了環境變數則可以省略掉長長的路徑,直接打可執行檔名稱即可,沒有設定環境變數則需要打完整路徑。
  • 設定環境變數只是為了編譯的時候讓自動尋找編譯器,其實也完全可以不用設定環境變數,使用絕對路徑指定編譯器位置即可。
  • 在linux上編譯,無論是ffmpeg還是qt還是其他,都是通用的步驟,第一步:./configure 第二步:make 第三步:make install 。
  • 至於具體configure後面有哪些引數,參照對應原始碼包的手冊就行,搜尋也一大堆。當然你用預設的就不帶任何引數一般也可以,自動採用預設引數進行編譯。
  • 交叉編譯ffmpeg命令:./configure --prefix=host --enable-static --disable-shared --disable-doc --cross-prefix=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux- --arch=arm --target-os=linux
  • 交叉編譯qt前提:修改mkspecs/qws/linux-arm-g++下面的qmake.conf,如果沒有設定環境變數則設定對應編譯器的絕對路徑,並將編譯器的名字改成你需要的。
  • 比如修改gcc編譯器:QMAKE_CC = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
  • 交叉編譯qt4.8.5命令:./configure -prefix host -embedded arm -xplatform qws/linux-arm-g++ -release -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -nomake tools
  • 交叉編譯qt5.9.8命令:./configure -prefix host -xplatform linux-arm-g++ -recheck-all -opensource -confirm-license -optimized-qmake -release -no-separate-debug-info -strip -shared -static -c++std c++1z -no-sse2 -pch -compile-examples -gui -widgets -no-dbus -no-openssl -no-cups -no-opengl -linuxfb -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype
  • 綜上所述交叉編譯和常規的編譯就一個區別,需要手動指定交叉編譯器路徑。ffmpeg是通過--cross-prefix=指定,qt比較龐大是通過更改配置檔案最後通過-xplatform指定配置檔名稱。
  • Qt6的編譯比較繁瑣,預設用cmake編譯,在linux上先用cmake3.19以上版本的原始碼,用make編譯生成cmake,然後再用cmake編譯qt生成qmake,最後呼叫qmake來編譯你的qt專案。