Linux环境下移植qt4及qwt从零开始

Linux环境下移植qt4及qwt从零开始

[email protected]

 

这两天终于在linux下搞定了qt的移植,以及qwt控件的安装。现在把整个过程整理出来。实际上,这篇帖子是我整理到一个word文档中的,文档现在已经上传到了csdn的资源中,链接是http://download.csdn.net/detail/zxzxy1988/3700961,那里面有各种图片,而这里由于csdn的blog限制,没有把图片贴出来,请大家见谅

另外说明的是,因为有一些地方时间太过久远了,所以不详细之处请大家见谅,并且请在帖子后面跟帖说明哪个地方不详细或者有错误,我再进行修正。


 

目录

Linux环境下移植qt4及qwt从零开始... 1

一、         名词解释... 4

1.      Trolltech. 4

2.      Qt. 4

3.      Qt designer & qt creator. 4

4.      Qt/E. 4

5.      Qtopia. 4

6.      Qtopia Core. 4

7.      环境介绍... 5

二、         X86平台IDE安装(主要包括qt designer和qt creator)... 6

三、         X86平台、ARM平台编译环境搭建... 7

1、       建立linux开发环境... 7

2、       编译及安装qt-x11-opensource-src-4.5.3. 7

3、       编译及安装qt-embedded-linux-opensource-src-4.5.3  x86版本... 7

4、       编译及安装qt-embedded-linux-opensource-src-4.5.3  ARM版本... 8

5、       编译qvfb. 8

6、       上面步骤的解释... 9

7、       设置环境变量... 9

8、       做一个测试(X86上的)... 10

9、       Qt4arm版本文件系统移植到mini2440上... 10

10、         运行效果... 12

四、         结合IDE进行X86下程序开发... 13

1.      建立新工程... 13

2.      选择一个对话框做模板。... 14

3.      更改文件名... 14

4.      添加标签... 15

5.      编译... 15

6.      添加main.cpp. 18

五、         将X86平台下的程序移植到arm上... 19

1.      Qt-creator开发环境的配置... 19

2.      一个例子... 19

3.      x86下的编译与调试... 20

4.      arm编译并移植... 20

六、         Qwt移植及开发... 22

1.      安装qwt. 22

2.      将生成的库文件变为全局可用... 22

3.      测试示例程序... 22

4.      在qt creator中加入这个插件... 23

七、         Qwt图表程序示例... 24

 

 



 

一、     名词解释

首先介绍几个名词,这也是初学者经常搞混的东东。

1.      Trolltech

是一个公司,专门进行qt开发,后来被nokia收购了~

2.      Qt

Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。

Qt分为好多版本,比较流行的就是qt3和qt4。

3.      Qt designer & qt creator

一般情况下,qt4包括qt designer和qt creator。前者是用来设计界面的,后者主要是一个IDE,可以建立工程,编译工程等。

4.      Qt/E

Qt/E(Qt/Embedded)最初是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高。最简单的理解方式:这是一个可以运行在资源相对较少的嵌入式系统上的程序

5.      Qtopia

Qtopia最初是sourceforge.net上的一个开源项目,全称是Qt Palmtop Environment (QPE),是一个构建于Qt/E之上的类似桌面系统的应用环境,包括了PDA和手机等掌上系统常见的功能如电话簿、日程表等。相比之下,Qt/E是基础类库。在QT4版本前要安装Qtopia需要先装Qt/E,但之后的就不需要了。版本4之后的Qtopia 已经带有QT/E库了。简单的理解,qtopia就是一个建立在QT/E上面的应用基础类程序(因为当时设计的时候主要是给PDA使用的,因此有相对丰富,并且有针对性的应用程序)

6.      Qtopia Core

Qtopia Core:就是原来的Qt/E,从Qt 4开始改名为Qtopia Core,把Qtopia Core并到Qtopia的产品线中去了。在版本4之前,Qte和Qtopia是不同的两套程序,Qte是基础类库,Qtopia是构建于Qte之上的一系列应用程序。但从版本4开始,Trolltech将Qte并入了Qtopia,并推出了新的Qtopia4。在该版中,原来的Qte被称为Qtopia Core,作为嵌入式版本的核心,既可以与Qtopia配合,也可以独立使用。原来的Qtopia则被分成几层,核心的应用框架和插件系统被称为 Qtopia Platform,上层的应用程序则按照不同的目标用户分为不同的包,如Qtopai PDA,Qtopia Phone。但实际上Qtopia Core就相当于原来的Qt/E,仍然作为基础类库。从Qt4.4开始,其名称又改回Qt-embedded了,之前的Qtopia改名为Qt Extended了。

7.      环境介绍

本文所实验的环境是ubuntu11.04和友善之臂mini2440平台。其他平台原理应类似,缺少库文件之类的请自行解决:)


 

二、     X86平台IDE安装(主要包括qtdesigner和qt creator)

 

请在qt官网上面下载qt安装包:

http://qt.nokia.com/downloads/sdk-linux-x11-32bit-cpp

这是x86环境下的在线安装包,也可以自行根据自己的机器配置选择,或者安装离线安装包。大概需要4个小时左右。

按照网站上的说明,先修改下来的 .run  文件的权限,然后运行即可。全部安装完成后,会在applications-programming里面生成qt creator 和 qtdesigner.

至此,本步骤轻松结束。

另,如果是ubuntu的话,也可以在ubuntusoftware center中搜索qt安装,效果一样,我采用的是后者。


 

三、            X86平台、ARM平台编译环境搭建

1.交叉编译器:版本较多,现在常用的是arm-linux-gcc-4.3.2.或者arm-linux-gcc-4.1.2

2. QT版本:qt-embedded-linux-opensource-src-4.5.3.tar.gz和qt-x11-opensource-src-4.5.3.tar.gz

3.触摸屏支持tslib

4.Linux系统上的一些编译工具或者库

1、建立linux开发环境

按照《micro2440用户手册》中,第五章《建立linux开发环境》所述,将NFS、交叉编译工具arm-linux-gcc、触摸屏tslib等(主要是这三个方面)都配置好。

 

2、编译及安装qt-x11-opensource-src-4.5.3

qt-x11版本可以产生Qt开发工具,如designer等等,最重要的是可以得到qvfb,嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。qt-embedded版本就是专门用于嵌入式方面的版本。

tar xjvf qt-x11-opensource-src-4.5.3.tar.bz2

cd qt-x11-opensource-src-4.5.3

./configure (4分钟)

make (近2小时)

make install

历经漫长的编译过程,默认安装在/usr/local/Trolltech/Qt-4.5.3下.编译完成后源程序不要删除,还有用。

3、编译及安装qt-embedded-linux-opensource-src-4.5.3  x86版本

qt-embedded-linux-opensource-src-4.5.3.tar.bz2

解压得到

qt-embedded-linux-opensource-src-4.5.3,

重命名为

qt-embedded-linux-opensource-src-4.5.3-x86.

再次解压qt-embedded-linux-opensource-src-4.5.3.tar.bz2,

并重命令为qt-embedded-linux-opensource-src-4.5.3-arm.

 

为什么有两个复制呢?我们可以从他们的名字上就不难看出前者是适合x86架构的,后者适合arm架构的。

如果有开发板的话,可以只编译qt-embedded版本成arm架构的就可以了,但是很多时候用qvfb的话,开发会方便很多,所以多编译一个x86架构的也不错。

 

具体步骤如下:

tar xjvfqt-embedded-linux-opensource-src-4.5.3.tar.bz2

mv qt-embedded-linux-opensource-src-4.5.3qt-embedded-linux-opensource-src-4.5.3-x86

tar xjvf qt-embedded-linux-opensource-src-4.5.3.tar.bz2

mv qt-embedded-linux-opensource-src-4.5.3qt-embedded-linux-opensource-src-4.5.3-arm

cdqt-embedded-linux-opensource-src-4.5.3-x86

./configure -prefix/usr/local/Trolltech/QtEmbedded-4.5.3-x86 -embedded x86 -qvfb (4分钟)

make (1.5小时)(8:45~10:15)

make install

qt-embedded-x86被安装在/usr/local/Trolltech/QtEmbedded-4.5.3-x86下.

 

4、编译及安装qt-embedded-linux-opensource-src-4.5.3  ARM版本

注意这些命令都是什么意思,尤其是最后的两个-I/usr/local/tslib/include-L/usr/local/tslib/lib,是对应相应的tslib的安装路径,-prefix /usr/local/Trolltech/QtEmbedded-4.5.3-arm是对应以后我们这个程序的安装路径

cdqt-embedded-linux-opensource-src-4.5.3-arm

./configure -prefix/usr/local/Trolltech/QtEmbedded-4.5.3-arm -release -shared -little-endian-no-qt3support -no-libtiff -no-libmng -qt-libjpeg -qt-gif -qt-zlib -qt-libpng-no-freetype -no-openssl -nomake examples -nomake demos -nomake tools-optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-separate-debug-info-xplatform qws/linux-arm-g++ -embedded arm -depths 4,8,16,32 -qt-mouse-tslib-I/usr/local/tslib/include -L/usr/local/tslib/lib

#make

#make install

qt-embedded-arm被安装在/usr/local/Trolltech/QtEmbedded-4.5.3-arm下.

(当然可以写成一个shell脚本。)

 

5、编译qvfb

做到这一步还有qvfb没有编译,到qt-x11-opensource-src-4.5.3中重新编译qvfb即可

cd qt-x11-opensource-src-4.5.3

cd /tools/qvfb

make

//会在qt-x11-opensource-src-4.5.3/bin下生成qvfb,我们将它copy至/usr/local/Trolltech/QtEmbedded-4.5.3-x86/bin下

cp ../../bin/qvfb/usr/local/Trolltech/QtEmbedded-4.5.3-x86/bin/

6、上面步骤的解释

这里解释一下上面这些东西都是干什么的。安装的qt-x11-opensource-src-4.5.3版本,顾名思义,就是在x86(电脑)上面可以运行的版本,这个版本中会产生designer可执行程序,和第二大步中安装的IDE中的是designer是一样的。只不过这个版本不会产生creator,所以还要做第二大步。

qt-embedded-linux-opensource-src-4.5.3这个版本编译了两次,分别是x86版本和arm版本。Arm版本是必须的,因为以后要在arm板子上面运行程序,一定要有相应的编译程序。但是,x86版本的程序是可选的,大家可以理解为,这里的x86版本相当于一个模拟器,但是,这个模拟器依赖于qvfb来运行。Qvfb在哪儿呢?是在qt-x11-opensource-src-4.5.3里面,所以还要继续编译。

怎么样,这个体系够复杂吧?这里一定要好好理解,因为我们经常会用到在两个平台之间交互的东西,尤其是底层的相关东西,因为两个系统的平台不一样,会有很大的区别,理解两个体系是嵌入式工程师的一个基本素质。

 

 

7.至此我们已经安装好了qt-x11版,即在PC机上运行的QT,qt-embedded-x86版(x86体系的嵌入式板子上运行的QT,在我们这个应用中就是一个模拟器)和qt-embedded-arm(arm板子上运行的QT).下一步:

 

7、设置环境变量

编辑#gedit setX86env.sh 内容如下:

#! /bin/sh

PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH

LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.3/lib:$LD_LIBRARY_PATH

 

QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-x86:$QTEDIR

PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-x86/bin:$PATH

LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-x86/lib:$LD_LIBRARY_PATH

编辑#gedit setARMenv.sh 内容如下:

#! /bin/sh

PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH

LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.3/lib:$LD_LIBRARY_PATH

QTEIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm:$QTDIR

PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:$PATH

LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib:$LD_LIBRARY_PATH

 

 

8、做一个测试(X86上的)

cd /usr/local/Trolltech/QtEmbedded-4.5.3-x86

source setX86env.sh

cd/usr/local/Trolltech/QtEmbedded-4.5.3-x86/demos/books

qvfb -width 640 -height 480 &

./books -qws

如图:

 

9、Qt4arm版本文件系统移植到mini2440上

   是在原来的root_qtopia文件系统的基础上构建的,前提准备:按照《micro2440用户手册》使用NFS挂载root_qtopia文件系统,随后进行如下操作:注意,下面的操作都是基于mini2440的:

1)    建立环境

在opt/下新建目录qt4.5.3/和qt4.5.3/plugin; qt4.5.3/bin

将/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib目录的全部内容(含lib)拷贝到qt4.5.3/下(以后知道哪些不必要的再考虑删除)

注意,这里使用的是我们刚才编译的arm平台下面的库

将/usr/local/Trolltech/QtEmbedded-4.5.3-arm/plugins/imageformats目录的全部内容(含imageformats)拷贝到qt4.5.3/plugin下

将/usr/local/Trolltech/QtEmbedded-4.5.3-arm/demos/mainwindow下的mainwindow拷贝到qt4.5.3/bin下(由于前面的qt4.5.3的arm版的配置中没有配置编译demos故可以自己在x86下的相应目录下编译arm版的mainwindow执行程序。)

2)    设置运行脚本

编写qt4运行环境变量设置脚本qt4.5.3,放到/bin目录下修改权限为777可执行。

  内容如下:

#! /bin/sh

export set TSLIB_TSDEVICE=/dev/input/event0

export setTSLIB_CONFFILE=/usr/local/etc/ts.conf

export setTSLIB_PLUGINDIR=/usr/local/lib/ts

export set TSLIB_CALIBFILE=/etc/pointercal

export set QTDIR=/opt/qt4.5.3

export set QPEDIR=/opt/qt4.5.3

export setQWS_DISPLAY="LinuxFB:/dev/fb0"

export setQWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"

export set QWS_KEYBOARD=TTY:/dev/tty1

export setQWS_MOUSE_PROTO="TSLIB:/dev/input/event0"

export set QT_PLUGIN_PATH=$QTDIR/plugins/

export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/

export set HOME=/root

export set PATH=$QTDIR/bin:$PATH

export setLD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

(这里的触摸屏相关设置与qtopia的一致,是因为qtopia使用的就是tslib-1.4.1因此不需拷贝自己编译的tslib相关库和配置文件,但是是必须编译tslib的否则qt4中的tslib是不能用的。)

3)    设置rcS

Vi /etc/init.d/rcS

设置rcS运行qt4应用程序。

在rcS的最下面,注释掉qtopia的运行

#/bin/qtopia &

#echo "                                  " >/dev/tty1

#echo "Starting Qtopia, pleasewaiting..." > /dev/tty1

改为qt4程序的运行

source /bin/qt4.5.3

if [ -f /etc/pointercal ] ; then

         $QPEDIR/bin/books -qws

         >/dev/null 2>/dev/null

else

         /usr/local/bin/ts_calibrate  触摸屏校正程序

         $QPEDIR/bin/books-qws

     > /dev/null 2>/dev/null

fi

 

#注意搞明白上面的话都是什么意思

10、      运行效果

应该和x86上面的差不多。


 

四、            结合IDE进行X86下程序开发

1.       建立新工程

这里的工程名为hello,建立好工程后,添加新文件。这里添加Qt Designer Form。

2.       选择一个对话框做模板。

3.       更改文件名

我们这里使用默认设置。

4.       添加标签

在新建好的框口上添加一个标签,并更改文本为hello world。

5.       编译

在工程文件夹上点击右键,弹出的菜单中选择第一项编译工程。

因为还没有写主函数,所以现在编译文件会出现错误,不过没关系,因为我们只是想编译一下ui文件。

点击这个图标,去掉弹出的菜单中第二项前的对勾,显示隐藏的文件。这时你就能看到ui文件对应的头文件了。


而如果去掉菜单中的第一项前的对勾,列表中的文件就会分类显示,如图

ui文件对应的.h文件默认为ui_dialog.h(例如form.ui对应ui_form.h)。

其中是设计器设计的窗口的对应代码。我们这里的.h文件是最简单的,其类名为Ui_Dialog,可以看到其中有我们添加的标签对象。

在这个类里有一个setupUi函数,我们就是利用这个函数来使用设计好的窗口的。

6.       添加main.cpp

我们添加main.cpp文件,并更改内容如下。

其中ui->setupUi(dd);一句就是将设计的窗口应用到新建的窗口对象上。

这时运行程序,效果如下。


 

五、            将X86平台下的程序移植到arm上

1.      Qt-creator开发环境的配置

启动Qt-creator。

 

在Qt-creator菜单栏Tools—〉Options…打开Options窗口。

在Options界面左侧,点击Qt4—〉Qt Versions右侧显示Qt Versions设置界面。

 

在Qt Versions界面中点击那个蓝色的大“╋”号图标

在下方Version Name:文本框内输入Qt的版本名,可以随便填,能区分各个版本即可(如pc版取Qt4.5.3-pc、x86版取QtE4.5.3-x86、arm版取QtE4.5.3-arm)。

 

单击Qmake Location:右侧Browse…按钮,在弹出的“Select QMake Executable”窗口中找到对应版本的qmake程序(按照我们前面安转的,pc版路径:/usr/local/Trolltech/Qt-4.5.3/bin/qmake,x86版路径:/usr/local/Trolltech/QtEmbedded-4.5.3/bin/qmake,arm版路径:/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin/qmake),单击打开,回到QtVersions界面。

 

回到Qt Versions界面,单击Debugging Helper:右侧Rebuild按钮,等待片刻,看到Debugging Helper:后出现一个绿色的“√”即可。

 

同理完成其他版本的添加。

 

添加完毕,单击OK按钮关闭Options窗口。

 

到此,Qt-creator配置完毕(我暂时就配置了这些)。

 

2.      一个例子

从/usr/local/Trolltech/QtEmbedded-4.5.3/demos下复制books例程到root/tmp文件夹下。

 

启动Qt-creator,File—〉Open File or Project…,打开root/tmp/books/books.pro。

 

这里我们分两部分,首先编译x86下的,并运行在qvfb下,再编译arm下的,移到开发板下运行。

 

3.      x86下的编译与调试

在Qt-creator界面左侧点击Projects图标,打开工程设置界面。

 

从上往下,

 

在Edit Project Settings for Project books——〉BuildSettings——〉Edit Build Configuration:单击Add,在下拉列表中选择UsingQt Version “QtE4.5.3-x86”弹出对话框单击Ok按钮,在Edit Build Configuration:下会出现蓝色的MakeQtE4.6.3-x86 Release active.字符,单击激活QtE4.6.3-x86 Release。

 

在Run Settings——〉Edit run configuration:右侧单击Show Details按钮,在打开的下拉列表中Arguments:文本框中添加参数“-qws”。

 

设置完毕,点击Edit图标,回到编辑界面。

 

编译:在Build菜单下,先Clean Project “books”,然后Build Project “books”,在右下角Compile Output窗口能看到编译信息(按我们上面这样走来,到此编译不会出问题的)。

 

运行:

启动终端,# /usr/local/Trolltech/QtEmbedded-4.5.3/bin/qvfb -width 800 -height480 &,启动Qvfb。

回到Qt-creator,Build——〉Run,运行程序。

 

切换我们的Qvfb窗口中,是不是看到Books运行的界面了。

 

调试:Debug——〉Start Debugging——〉Start Debugging,即可启动调试(请保证books路径中没有中文名,即不要把books工程放在了某个含有中文字符的文件夹下,不然无法启动调试)。

 

此时感觉如果前面编译选项Edit Project Settings for Project books——〉BuildSettings——〉Edit Build Configuration:选择Debug项,则调试启动速度比Release时的要快很多。

 

4.      arm编译并移植

 

编译:在Projects设置界面下,选择Using Qt Version “QtE4.5.3-arm”项,余下参数不变,build。

 

复制编译好的文件(也许还有images文件夹)到2440的NFS文件系统的某个目录下,执行./books –qws

 

运行及错误处理:

在minicom下面,ps一下,找到qpe进程对应的PID,比如1234,然后通过kill 1234杀死Qtopia。当然,也可以通过修改rcS来解决。

进入books目录,执行./books –qws,此时就会出现前面讲到的“relocation error: /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib/libQtGui.so.4:symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with linktime reference”错误。

 

网上一个人的解决办法:

我的解决办法是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件libstdc++.so.6.0.8(通过右键属性——〉基本,可以看到链接的文件),复制并重命名为libstdc++.so.6到/opt/FriendlyARM/mini2440/root_qtopia/lib文件夹下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。

 

*重命名其实是比较野蛮的方法,可以用ln命令的,参照下面这篇文章……

 

http://hi.baidu.com/a263238386/blog/item/362f01ce7b11a10a93457eae.html

 

然后再运行./books –qws,看问题是不是解决了!


 

六、            Qwt移植及开发

Qwt是qt的一个插件,可以用来实现图表的功能。这里简介安装过程如下:

1.      安装qwt

mkdir 00Software

cd 00Software

wget http://downloads.sourceforge.net/project/qwt/qwt/6.0.1/qwt-6.0.1.zip

unzip qwt-6.0.1.zip

rm qwt-6.0.1.zip

cd qwt-6.0.1

qmake

//注意,这里的qmake需要额外注意。刚刚我们编译了很多版本的qt,如果在PC上运行,就需要用PC版本的qmake,arm上运行,就要用arm版本的qmake,如果是qvfb模拟器运行,就要使用模拟器版本的qmake。具体做法:

Arm版本:export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin/:$PPATH,把arm版本的qmake放在环境变量的最前面,这样系统找到这个版本的qmake之后就不会再找别的qmake了。X86的同样道理:

export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3/bin/:$PPATH

注意:两个版本的都需要编译。

sudo make

sudo make install

2.      将生成的库文件变为全局可用

cd /usr/local/lib

sudo ln -s/usr/local/qwt-6.0.1/lib/libqwt.so.6 libqwt.so.6

sudo ldconfig

//注意最后的ldconfig,是重新载入动态链接库的意思。这样才能够让我们的配置生效。

3.      测试示例程序

cd ~/00Software/qwt-6.0.1/examples

qmake

make

 

cd bin

./sinusplot

会出现一个正弦曲线。这时候说明至少x86版本的成功了。

4.      在qt creator中加入这个插件

cd~/00Software/qwt-6.0.1/designer/plugins/designer

sudo cp libqwt_designer_plugin.so/opt/qtcreator-2.3.0/bin/designer/

这一步我没有成功,因为我的qtcreator没有这样的安装目录。因此,我选择了一个变通的方式,将这个插件装在designer下面:

sudo cp libqwt_designer_plugin.so /usr/local/Trolltech/QtEmbedded-4.5.3/plugins/designer/plugin

这样做,在designer下面会看到这个插件,但是creator下面看不到这个插件,这个问题有待解决,不过可以使用了。需要注意的是,这个时候要启动/usr/local/Trolltech/QtEmbedded-4.5.3/bin下面的designer,才能看到这个插件,而在qt creator中是不显示的,算是一个小遗憾。


 

七、            Qwt图表程序示例

首先使用qt designer建立一个名为qwt_designer的ui,里面只添加一个qwtPlot,这里和VC差不多。

将这个ui保存为qwt_design.ui,然后打开qt creator,同第四部分一样,建立一个工程,并把现在的ui文件加入。

添加main.cpp文件如下图所示:

将pro文件修改为下图所示:

其中,上面注释掉的是为了产生arm代码而包含的qwt的库;下面的是为了产生PC下面的代码而包含的qwt的库。

选择左侧的project,选择“manage”,添加名为“QT-X11”的版本。该版本对应的是之前qt-x11-opensource-src-4.5.3所编译出来的版本的bin目录。完成之后,点击左下方的绿色三角,编译并运行。

运行结果:

 

这是在PC上面模拟运行。将.pro文件arm平台下的注释去掉,并且将X86平台下的注释加上:

在project中,选择qt-4.5.3-arm

选择 build – clean all,再rebuild即可生成arm架构下的文件,将其拷贝到NFS文件系统下:

在mini2440下执行./qwt_design –qws即可。

                                   


错误处理:

如果出现“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。

我的解决办法是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件libstdc++.so.6.0.8(通过右键属性——〉基本,可以看到链接的文件),复制并重命名为libstdc++.so.6到/opt/FriendlyARM/mini2440/root_qtopia/lib文件夹下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。


另,移植qwt的时候,如果qt designer的版本过低(4.5),可能就显示不出来qwt的插件(因为我是用ubuntu的software center直接安装的qt,发现版本太低),解决方法很简单,就是安装一个新版本的qt designer 就可以了(我的是4.7.4)

第三,如果想在qtcreator中集成的designer中显示qwt控件,将刚刚那个动态库libqwt_designer_plugin.so拷贝到qt sdk安装目录\QtCreator/lib/qtcreator/plugins/designer下面就可以了

你可能感兴趣的:(Linux环境下移植qt4及qwt从零开始)