1. 程式人生 > >交叉編譯ARM版Qt(qt-everywhere-opensource-src-4.8.4)

交叉編譯ARM版Qt(qt-everywhere-opensource-src-4.8.4)

交叉編譯ARM版 Qt (qt-everywhere-opensource-src-4.8.4)

因實際專案需求,需將Qt編譯成LINUX-ARM版,以下為整個操作過程,使用Qt編寫的程式已在實際開發板上執行,在此貼出,但願能為需要的朋友提供上幫助。

準備工作:

Linux核心版本:  

        開發電腦:Ubuntu12.04,開發板:linux-2.6.37

交叉編譯工具:

        arm-none-linux-gnueabi 4.4.1

Qt安裝包:

        qt-everywhere-opensource-src-4.8.4.tar.gz

安裝

一.安裝交叉編譯工具

 1.本機使用的交叉編譯工具是:arm-none-linux-gnueabi

 2.新增交叉編譯工具的路徑至相應環境變數中:

   export PATH=/usr/local/arm-2009q1-203/bin/:$PATH

 3.通過以下命令檢視arm-none-linux-gnueabi編譯工具是否安裝成功

   a. 執行:arm-none-linux-gnueabi-g++ -v

   b. 執行:arm-none-linux-gnueabi-gcc -v

   如果以上兩步都能正確列印對應的版本資訊,則表明arm-none-linux-gnueabi編譯工具

   已安裝成功!

二.交叉編譯ARM版Qt

 1.下載Qt原始碼包 qt-everywhere-opensource-src-4.8.4.tar.gz;

 2.解壓Qt原始碼包

   tar -xvfz qt-everywhere-opensource-src-4.8.4.tar.gz

 3.修改檔案:

/usr/local/Qt-4.8.4-linux-arm/mkspecs/qws/linux-arm-g++/qmake.conf

   # 設定交叉編譯工具鏈:

   # 本專案使用的交叉編譯工具是 arm-none-linux-gnueabi-g++

   #

   QMAKE_CC                         = arm-none-linux-gnueabi-gcc

   QMAKE_CXX                      = arm-none-linux-gnueabi-g++

   QMAKE_LINK                      = arm-none-linux-gnueabi-g++

   QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

   QMAKE_AR                   = arm-none-linux-gnueabi-ar cqs

   QMAKE_OBJCOPY      = arm-none-linux-gnueabi-objcopy

   QMAKE_STRIP             = arm-none-linux-gnueabi-strip

 4.(如有需要,需修改g++.conf檔案)

   修改檔案: /usr/local/Qt-4.8.4-linux-arm/mkspecs/common/g++.conf

   # 設定使用ARM高階特性的編譯標誌:

   #

   QMAKE_CFLAGS_RELEASE  += -O2 -march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp

 5.配置Qt編譯選項

   進入Qt解壓目錄,執行如下命令:

 ./configure -prefix /usr/local/Qt-4.8.4 -embedded arm -xplatform /qws/linux-arm-g++ -depths 16,24,32 -little-endian -no-mmx -no-3dnow -no-sse -no-sse2 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle -qt-freetype -qt-mouse-pc -qt-mouse-linuxtp -qt-mouse-linuxinput -plugin-mouse-pc -fast -qt-gfx-transformed -opensource -confirm-license

   或者寫一個指令碼config.sh,內容如上,之後執行這個指令碼:./config.sh

 6.執行 make 命令;

   該步驟大致需要2~3個小時

錯誤:qtconcurrentiteratekernel.cpp:(.text+0x3c): undefined reference to `clock_gettime'

修改:vim src/corelib/Makefile 加上-lrt

LIBS          = $(SUBLIBS)  -L/opt/qt-everywhere-opensource-src-4.8.4/lib -lpthread -lm -ldl -lrt

 7.執行 make install 命令;

 8.修改使用者環境變數 

   export ARMQTDIR=/usr/local/Qt-4.8.4

   export PATH=$ARMQTDIR/bin:$PATH

   export MANPATH=$ARMQTDIR/man:$MANPATH

   export LD_LIBRARY_PATH=$ARMQTDIR/lib:$LD_LIBRARY_PATH

 9.測試 ARM 版 QT 是否安裝並配置成功:

    a. 執行:qmake -v

        列印以下對應資訊:

                QMake version 2.01a

                Using Qt version 4.8.4 in /usr/local/Qt-4.8.4/lib

    b. 執行:which qmake

                列印以下對應資訊:

                 /usr/local/Qt-4.8.4/bin/qmake

    c. 編寫一個簡單的測試程式,檔名為hello.cpp,進入該檔案目錄,進行工程編譯,看是否能正確通編譯

         hello.cpp原始碼:

         #include <QApplication>

         #include <QDebug>

         int main(int argc,char *argv[])

        {

            qDebug("Hello, welcome to Qt world!");

            return 0;

         }

  順序執行以下操作:

  @1. 執行:qmake -project hello1.cpp

        生成 hello1.pro 工程檔案

  @2. 執行:qmake hello1.pro

        生成 Makefile 檔案

  @3. 執行:make

        生成 hello.o, hello 檔案

       如果執行@2步驟時出現以下錯誤:

           QMAKESPEC has not been set, so configuration cannot be deduced.

           Error processing project file: hello1.pro

       則是 QMAKESPEC 變數沒有設定好,執行:

      export QMAKESPEC=/usr/local/qt-4.8.4/mkspecs/qws/linux-arm-g++

cd /usr/local/Qt-4.8.4/lib/

file libQT*   看輸出資訊是ELF ARM

之後將/usr/local/Qt-4.8.4/lib/libQt* 根檔案系統/usr/lib/下