交叉编译qwt控件并在Mini2440开发板上运行(Ubuntu12.04 + QtE4.6.3 + qwt6.1.2)

Windows下编译运行qwt的方法请参阅博主的另一篇文章:
Qt第三方图形控件qwt的编译安装与使用的简单方法(Win7+Qt4.8.6+MinGW4.8.2)

Linux下编译运行qwt的方法请参阅博主的前一篇文章:
Linux下编译并使用Qt第三方图形控件qwt(Ubuntu12.04 + Qt4.8.1 + qwt6.1.2)

编译环境

主机系统: VMWare + Ubuntu 12.04 (32位)
交叉编译器版本: arm-linux-gcc-4.4.3-EABI
Qt版本: QtE-4.6.3 + Qt Creator-2.5.0
qwt版本: qwt-6.1.2

安装步骤

  1. 下载qwt源文件并解压至任意目录
    地址:http://sourceforge.net/projects/qwt/files/qwt/6.1.2/

  2. 配置qwt的安装信息

    • 修改qwt的安装路径。 qwt默认安装在/usr/local/qwt-6.1.2目录下,博主在上一篇文章中已经将一个qwt6.1.2的主机版本安装在默认目录中,因此交叉编译版本需要修改为其他路径。
    • 精简安装内容。 将交叉编译版本不需要的和Mini2440的QtE-4.6.3不支持的模块删去。

    具体步骤,打开刚解压缩的qwt-6.1.2源文件目录中的qwtconfig.pri文件:

    • 将第22行的路径修改为QWT_INSTALL_PREFIX = /usr/local/qwt-$$QWT_VERSION-Mini2440,交叉编译版本的qwt将会被安装在/usr/local/qwt-6.1.2-Mini2440目录下
    • 将102行的#QWT_CONFIG += QwtOpenGL注释掉,删除OpenGL支持,这是因为Mini2440官方给出的编译QtE-4.6.3的配置文件中未开启OpenGL,否则编译会出现错误: qwt_plot_glcanvas.h:15:17: fatal error: qgl.h: No such file or directorycompiling qwt_abstract_slider.cpp
    • 将121行的#QWT_CONFIG += QwtDesigner注释掉,不编译Designer插件,这是因为Designer插件只能在主机上使用,否则会出现编译错误:qwt_designer_plugin.h:23: Error: Undefined interface
    • 如果想在开发板上测试qwt源文件中提供的example,则将144行的QWT_CONFIG +=QwtExamples注释取消掉即可,这样在稍后make过程中会在example目录下自动生成名为bin的可在mini2440开发板上执行的文件目录
  3. 交叉编译、安装qwt

cd qwt-6.1.2
qmake-arm qwt.pro
make 
make install

等待片刻即可。

注:
qmake-arm就是QtE4.6.3的qmake程序,由于博主的Ubuntu下还有桌面版本的Qt4.8.1,两个版本的Qt库都加入了系统的PATH环境变量中,因此为了避免冲突,遂将4.8.1版本的qmake重命名为qmake-qt4,将4.6.3版本的qmake重命名为qmake-arm

安装完成后,打开/usr/local路径,可以发现已经自动生成了一个qwt-6.1.2-Mini2440目录,刚才安装的所有文件都在这里。

交叉编译包含qwt控件的Qt工程

在Qt Creator中新建一个包含.ui文件的工程(Qt库选择Embedded版本的QtE-4.6.3),打开pro工程文件,在文件尾部加入如下一段:

#qwt setting

QWT_ROOT = /usr/local/qwt-6.1.2-Mini2440    #qwt控件安装位置,注意与qwtconfig.pri配置文件配合修改

include ( $${QWT_ROOT}/features/qwt.prf )

#end qwt setting

然后进入设计器界面,随便拖放一个qwt控件到对话框中,点击build进行编译即可。

在Mini2440开发板上运行包含qwt控件的Qt程序

将qwt库文件复制到开发板中

直接将刚才安装的/usr/local/qwt-6.1.2-Mini2440/lib文件夹中的libqwt.so.6.1.2文件拷贝到mini2440开发板中的/usr/local/lib目录下,然后从开发板终端进入目录/usr/local/lib,为qwt库建立3个软连接:

cd /usr/local/lib
ln -s libqwt.so.6.1.2 libqwt.so.6.1
ln -s libqwt.so.6.1.2 libqwt.so.6
ln -s libqwt.so.6.1.2 libqwt.so

配置Qt程序的运行环境并运行程序

Mini2440开发板中已经具备了Qt程序运行的条件,但是关于Qt程序运行的环境变量却并没有配置在系统中。这里,我们仿照友善之臂qt4脚本的做法(在开发板中直接vi /bin/qt4即可看到),建立一个名为qtenv的脚本文件,其内容如下:

#!/bin/sh 
export TSLIB_TSDEVICE=/dev/input/event0 
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_LIBRARY_PATH=/usr/local/lib
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin

export QWS_DISPLAY=:1

TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent
if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then
    export QWS_MOUSE_PROTO="Tslib:/dev/input/event0 MouseMan:/dev/input/mice"
    if [ ! -s /etc/pointercal ] ; then
        rm /etc/pointercal
        /usr/local/bin/ts_calibrate
    fi
else
    export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
fi
unset TS_INFO_FILE

export QWS_KEYBOARD=TTY:/dev/tty1

export HOME=/root

cd /home/plg
./$1 -qws
hotplug

将刚建立的qtenv脚本文件和Qt应用程序qwt_test文件拷贝到/home/plg目录下,然后执行:

cd /home/plg
./qtenv qwt_test &

即可成功在后台运行包含qwt控件的Qt程序。

参考资料:
Qwt移植
移植qwt库到arm开发板!!!
Ubuntu12.04交叉编译mini2440提供的QtE4.6.3并测试sqlite3数据库
Linux软连接和硬链接

你可能感兴趣的:(linux,mini2440,qwt控件,交叉编译qwt,QtE-4-6-3)