1. 程式人生 > >交叉編譯安裝ARM平臺上的Qt

交叉編譯安裝ARM平臺上的Qt

一、宿主機環境搭建:

編譯需要x11庫的支援,在Ubuntu下安裝命令:

sudo apt-get install libx11-dev libxext-dev libxtst-dev

二、下載原始碼包:qt-everywhere-opensource-src-4.7.0.tar.gz

三、解壓原始碼包,檢視Qt原始碼中是否有適合我們編譯平臺的配置檔案,進入到原始碼目錄下的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

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

四、配置:

可以執行./configure --help 檢視配置幫助

配置命令:

./configure -opensource -embedded arm -xplatform qws/linux-arm-g++ -qt-libtiff -qt-libmng -no-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -qt-mouse-linuxinput -no-neon -qt-libjpeg -qt-libpng

可以將配置編寫進指令碼檔案。

五、執行make –j4

-j引數指定編譯時的執行緒數,make –j不限制執行緒數。

六、執行make install。

預設安裝路徑為:/usr/local/Trolltech/QtEmbedded-4.7.0-arm

七、配置環境變數(vim /etc/profile):

#!/bin/sh

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm

export QMAKEDIR=$QTDIR/qmake

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=$QMAKEDIR/bin:$QTDIR/bin:/opt/arm-linux-gcc/bin:$PATH

export QMAKESPEC=qws/linux-arm-g++

使環境變數有效的方法:1、登出,重新登入。2、source /etc/profile(只在本次終端中有效)

測試搭建環境:qmake –v

QMake version 2.01a

Using Qt version 4.7.0 in /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib

出現上述文字則編譯成功。

八、交叉編譯。

編寫Hello World程式,儲存為hello.cpp。

#include  <QApplication>

#include  <QLabel>

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

        QApplication  app(argc,  argv);

        QLabel  *label   =  new  QLabel("Hello Qt!");

        label->show();

        return  app.exec();

}

執行如下命令:

1、  qmake –project(生成工程檔案)

2、  qmake (生成Makefile)

3、  make (編譯工程)

QT編譯出現fatal error: QApplication: No such file or directory

因為Qt5裡不再用QtGui模組,而是使用QtWidgets模組, 所以在.pro里加上 在hello.pro檔案中新增  QT += core gui widgets 

九、開發板環境搭建及測試執行

1、在開發板上新建目錄/usr/local/Trolltech/QtEmbedded-4.7.0-arm,再把Ubuntu相同目錄下的lib和plugins資料夾拷貝到該目錄下。

2、將libstdc++.so.6.0.9 和libz.so.1.2.3(這兩個檔案在交叉編譯器的lib目錄中) 傳送到開發板的 /usr/local/lib 目錄下。(在這個步驟中,有的資料拷貝librt,具體操作命令如:#cp /usr/local/arm/4.5.1/arm-none-linux-gnueabi/libc/lib/librt-2.11.1.so /root/rootfs/lib

     #cd /root/rootfs/lib

     #chmod 777 librt-2.11.1.so

     #ln -s librt-2.11.1.so librt.so.1)

3、設定開發板環境變數:

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

4、測試執行:第八步中生成的檔案下載到開發板中,執行命令:./hello –qws測試程式。

附:開發板環境詳細配置:

export QWS_DISPLAY=:1

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QWS_MOUSE_PROTO="LinuxInput:/dev/touchscreen"

export QT_QWS_FONFDIR=$QTDIR/lib/fonts/

export QT_PLUGIN_PATH=$QTDIR/plugins

遇到問題總結:

1、  開發板上的程式不能顯示中文漢字,可能是環境變數沒有設定QT_QWS_FONFDIR(猜測,沒有測試)。

2、  在編譯有資料庫的程式時出錯,說沒有發現QsqlDatabase之類的,在生成的*.pro檔案中加入QT += sql編譯通過了。之前,還懷疑是在配置編譯Qt時沒有新增sql功能,還在配置中加入了-qt-sql-sqlite語句重新編譯了Qt。。。