从零开始移植QT4.8.5之四--交叉编译QT程序并运行在OK6410上

首先我们需要自己写一个代码,什么 代码都行,拿来别人的也可以。可以在windows或者linux上写都行,我个人的习惯是在windows下面编辑代码,查看运行效果,效果没问题了在拿到linux下进行交叉编译。

下面我们现在windows下写一个最简单的例子:你好世界!

这个例子中会使用到中文和按钮切换标签的内容。

如何创建工程这里就不细讲了,书上和网上有很多教程,按照步骤去做就好。

代码很简单,如下:

main.cpp文件

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

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("你好世界!"));
}
界面如下:

从零开始移植QT4.8.5之四--交叉编译QT程序并运行在OK6410上_第1张图片

然后我们在windows上运行一下看看

从零开始移植QT4.8.5之四--交叉编译QT程序并运行在OK6410上_第2张图片从零开始移植QT4.8.5之四--交叉编译QT程序并运行在OK6410上_第3张图片

后面的是按下按钮之后。

然后就可以将我们的文件复制到linux 下面去进行交叉编译了,这里只需要复制源码文件,工程文件建议删除,因为在交叉编译的时候会生成新的工程文件,我的文件如下

从零开始移植QT4.8.5之四--交叉编译QT程序并运行在OK6410上_第4张图片

把他们压缩成一个包,到linux下面去解压,然后使用终端跳转到这写文件的路径下

linux@ubuntu:~/16021/QTprog$ cd chinesefont-linux/

然后找到交叉编译出来的qmake路径使用qmake -project

linux@ubuntu:~/16021/QTprog/chinesefont-linux$ /home/linux/arm/qt-4.8.5-arm/bin/qmake -project

有的人会把这个交叉编译qmake设置为环境变量,我习惯把x86下的qmake设置为环境变量,这样就可以在linux下面查看效果,但是在交叉编译的时候就需要输入qmake的全路径,如何设置还需要根据个人需要。

这时候目录下就会出现.pro的工程文件

然后我们在qmake就可以生成makefile

linux@ubuntu:~/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是必须的。

然后我们在开发板上运行一下,看一下效果:

从零开始移植QT4.8.5之四--交叉编译QT程序并运行在OK6410上_第5张图片
从零开始移植QT4.8.5之四--交叉编译QT程序并运行在OK6410上_第6张图片

是不是和电脑看到一样,如果想做成开机启动,只需要将启动脚本加入到/etc/init.d/rcS里面就可以了。

讲到这里我们就已经从windows安装到linux安装再到arm平台交叉编译,最后将自己的程序运行起来了 。





你可能感兴趣的:(嵌入式系统移植)