1. 程式人生 > >從零開始移植QT4.8.5之四--交叉編譯QT程式並執行在OK6410上

從零開始移植QT4.8.5之四--交叉編譯QT程式並執行在OK6410上

首先我們需要自己寫一個程式碼,什麼 程式碼都行,拿來別人的也可以。可以在windows或者linux上寫都行,我個人的習慣是在windows下面編輯程式碼,檢視執行效果,效果沒問題了在拿到linux下進行交叉編譯。

下面我們現在windows下寫一個最簡單的例子:你好世界!

這個例子中會使用到中文和按鈕切換標籤的內容。

如何建立工程這裡就不細講了,書上和網上有很多教程,按照步驟去做就好。

程式碼很簡單,如下:

main.cpp檔案

#include "mainwindow.h"
#include <QApplication>
#include <QFont>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    //中文支援
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));        //支援中文
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); //支援中文檔名顯示
    QFont font;
    //font.setPointSize(160); //16的字號
    font.setPixelSize(16);
    font.setFamily(("wenquanyi"));
    font.setBold(false);

    a.setFont(font);

    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    ui->label->setText(tr("你好世界!"));
}
介面如下:


然後我們在windows上執行一下看看


後面的是按下按鈕之後。

然後就可以將我們的檔案複製到linux 下面去進行交叉編譯了,這裡只需要複製原始碼檔案,工程檔案建議刪除,因為在交叉編譯的時候會生成新的工程檔案,我的檔案如下


把他們壓縮成一個包,到linux下面去解壓,然後使用終端跳轉到這寫檔案的路徑下

[email protected]:~/16021/QTprog$ cd chinesefont-linux/

然後找到交叉編譯出來的qmake路徑使用qmake -project

[email protected]:~/16021/QTprog/chinesefont-linux$ /home/linux/arm/qt-4.8.5-arm/bin/qmake -project

有的人會把這個交叉編譯qmake設定為環境變數,我習慣把x86下的qmake設定為環境變數,這樣就可以在linux下面檢視效果,但是在交叉編譯的時候就需要輸入qmake的全路徑,如何設定還需要根據個人需要。

這時候目錄下就會出現.pro的工程檔案

然後我們在qmake就可以生成makefile

[email protected]:~/16021/QTprog/chinesefont-linux$ /home/linux/arm/qt-4.8.5-arm/bin/qmake

然後使用make編譯

之後會出現可執行檔案,比如我的是chinesefont

把它拷貝到開發板的檔案系統上,路徑隨意。我是直接拷貝到根目錄下,然後需要一個啟動指令碼

#!/bin/sh
base1=qpe
pid=`/bin/pidof $base1`
if [ -n "$pid" ]; then
	killall $base1
fi

base2=qss
pid=`/bin/pidof $base2`
if [ -n "$pid" ]; then
	killall $base2
fi

base3=quicklauncher
pid=`/bin/pidof $base3`
if [ -n "$pid" ]; then
	killall  $base3
fi


base4=fluidlauncher
pid=`/bin/pidof $base4`
if [ -n "$pid" ]; then
	killall  $base4
fi

export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QTDIR=/home/linux/arm/qt-4.8.5-arm/


export LD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/bin


if [ -c /dev/input/event2 ]; then
        export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"
        if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
                rm /etc/pointercal
                /root/tslib/build/bin/ts_calibrate
        fi
else
        export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
        >/etc/pointercal
fi
export QWS_KEYBOARD=TTY:/dev/tty1



FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)

#export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
case "$FB_SIZE" in
800,480)
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
480,272)
export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
;;
*)
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
esac
#export QWS_DISPLAY=:1



export HOME=/root/QtE4Home

#cd /home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher(qt可執行檔案的路徑)
./chinesefont -qws
其中倒數第二行是跳轉到可執行檔案的路徑下,根據自己的需要進行修改,我的指令碼和可執行在同一個目錄,所以我把這行註釋掉了。

最後一行就是啟動可執行程式,結尾的-qws是必須的。

然後我們在開發板上執行一下,看一下效果:



是不是和電腦看到一樣,如果想做成開機啟動,只需要將啟動指令碼加入到/etc/init.d/rcS裡面就可以了。

講到這裡我們就已經從windows安裝到linux安裝再到arm平臺交叉編譯,最後將自己的程式執行起來了 。