從零開始移植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平臺交叉編譯,最後將自己的程式執行起來了 。