編譯 arm 版的qt


因為項目需要,我們需要在開發板上使用QT開發平台,因此需要編譯一個arm版的QT. 在網上找了一些資料,費了幾天時間,終於成功了。

第一步,准備源碼

先下載QT 源碼,在http://qt-project.org/downloads頁面,找到Qt libraries 4.8.6 for embedded Linux (230 MB) (Info), down 下來,拷貝到linux系統下。

解壓縮,tar -xzvf qt-everywhere-opensource-src-4.8.6.tar.gz

qt 源碼將被解壓到qt-everywhere-opensource-src-4.8.6下。


第二步,准備編譯器

然后安裝交叉編譯器,我們的arm 平台編譯器已經安裝好,安裝在 /home/xyz/arm/ 目錄下。

為了使QT 配置程序能找到我們的編譯器,必須把交叉編譯器所在的目錄放到PATH環境變量上。

export PATH=$PATH:/home/xyz/arm/bin


第三步,配置,編譯,安裝

然后到QT的源碼所在目錄下,

再進到qws目錄下

cd mkspecs/qws

ls 看一下,有一個適合我們的配置,就是linux-arm-gnueabi-g++ ,如果沒有,就自己建一個目錄,然后從別的目錄下拷貝這兩個文件

qmake.conf 

qplatformdefs.h
進入到linux-arm-gnueabi-g++目錄,看一下qmake.conf 的內容,如下:

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++

# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP             = arm-none-linux-gnueabi-strip

正確,我們就使用這個配置,如果不正確,可以改成自己的編譯器的名字。


接下來配置QT, 在QT的源碼目錄下有一個可執行程序 configure, 運行./configure --help 可以看到詳細的配置選項,

為了操作方便,可以寫一個腳本文件,文容如下

./configure \
-embedded arm \
-xplatform qws/linux-arm-gnueabi-g++ \
-release \
-opensource  \
-fast  \
-stl \
-no-accessibility  \
-no-scripttools  \
-no-mmx  \
-no-multimedia  \
-no-svg  \
-no-3dnow  \
-no-sse  \
-no-sse2  \
-no-libmng  \
-no-libtiff  \
-no-multimedia  \
-silent  \
-qt-libpng  \
-qt-libjpeg  \
-make libs  \
-nomake tools \
-nomake examples \
-nomake docs  \
-nomake demos \
-nomake translations \
-no-nis \
-no-cups \
-no-iconv  \
-no-dbus  \
-no-openssl  \
-little-endian \
-qt-freetype  \
-depths all \
-qt-gfx-linuxfb  \
-no-gfx-transformed  \
-no-gfx-multiscreen  \
-no-gfx-vnc  \
-no-gfx-qvfb  \
-qt-kbd-linuxinput  \
-no-glib  \
-no-phonon \
-no-phonon-backend \
-no-webkit \
-no-javascript-jit \
-no-sql-db2  \
-no-sql-ibase \
-no-sql-mysql \
-no-sql-oci \
-no-sql-odbc \
-no-sql-psql \
-no-sql-sqlite \
-no-sql-sqlite2 \
-no-sql-sqlite_symbian \
-no-sql-symsql  \
-no-sql-tds \
-no-qt3support \
-qt-mouse-linuxinput \
-no-mouse-tslib \
-no-mouse-linuxtp \
-no-script \
-no-largefile

保存,取名了qt.config.sh

這個配置幾乎把QT裁剪到了最小尺寸,運行此腳本,生成Makefile,

然后gmake, 這個過程很慢,請耐心等待。

然后gmake install, QT 庫被安裝到  /usr/local/Trolltech/QtEmbedded-4.8.6-arm


第四步,測試QT arm 開發環境

QT arm 版已經編譯,安裝完成。測試一下QT arm 開發環境

設置環境變量

export ARMQDIR=/usr/local/Trolltech/QtEmbedded-4.8.6-arm

export PATH=$ARMQDIR/bin:$PATH

export MANPATH=$ARMQDIR/man:$MANPATH

export LD_LIBRARY_PATH=$ARMQDIR/LIB:$LD_LIBRARY_PATH


執行qmake -v, 顯示以下信息

QMake version 2.01a
Using Qt version 4.8.6 in /usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib

執行which qmake, 顯示

 /usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake


編寫一個hello world 程序

#include <QApplication>
#include <QDebug>

int main(int argc,char *argv[])
{
        qDebug("Hello, welcome to Qt world!");
        return 0;
}

保存為hello.cpp

執行qmake -project hello.cpp -o hello.pro

生成hello.pro

執行qmake hello.pro

生成Makefile

執行 make, 生成hello.o, hello


這一步遇到一個奇怪的問題,就是如果工作目錄下包含了子目錄,則運行qmake就會hang在那兒,這不知是不是QT的bug.


第五步,下載到開發板

首先在開發板的linux 系統下建立同名的目錄,以便拷貝,

/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib

然后把/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib目錄下的文件全部拷貝過去,我是打了一個包,然后用tftp傳過去的。

然后把 libstdc++.so.6.0.9 和libz.so.1.2.3 傳送到開發板的 /usr/local/lib 目錄下,

設置環境變量 LD_LIBRARY_PATH 以便使QT 程序能找到相應的庫,

export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib:/usr/local/lib

運行QT測試程序

testgui -qws

lcd 顯示屏上顯示出一個窗口界面,和在windows開發環境下顯示出的界面基本相同。


至此,算是成功了。不過還沒有做對觸摸屏的支持。


免責聲明!

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



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