Linux下编译并使用Qt第三方图形控件qwt(Ubuntu12.04 + Qt4.8.1 + qwt6.1.2)

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

编译环境

主机系统: VMWare + Ubuntu 12.04 (32位)
编译器版本: gcc-4.6.3
Qt版本: Qt-4.8.1 + Qt Creator-2.5.0
qwt版本: qwt-6.1.2

安装步骤

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

  2. 直接使用默认的配置进行安装,在终端中

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

等待片刻即可。

注:
1)install需要root权限
2)qmake-qt4就是Qt4.8.1的qmake程序,由于博主的Ubuntu下还有嵌入式版本的QtE4.6.3,两个版本的Qt库都加入了系统的PATH环境变量中,因此为了避免冲突,遂将4.8.1版本的qmake重命名为qmake-qt4,将4.6.3版本的qmake重命名为qmake-arm
3)qwt默认将被安装在/usr/local/qwt-6.1.2目录下

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

  • doc:又包括html和man两个目录,qwt的说明文档都在这里,其中html目录就是qwt官方网页的本地版本
  • features: qwt的安装配置文件,实际上是从源文件根目录中直接复制过来的,在安装的时候由于直接使用默认配置,所以就没修改,但是在工程中使用qwt的时候还是需要用到这些文件的,后面会介绍
  • include:所有qwt控件的头文件都在这里
  • lib:核心部分,由于默认配置文件是将qwt库编译成动态库,因此本目录下是4个so文件(实际上只有一个库文件,另外三个是软连接)
  • plugins: Qt Designer的插件,用于在Designer或Creator设计器中将qwt显示在左侧的控件列表中

使用qwt

安装qwt的Designer插件

安装插件并不是必须的,因为可能一个qt项目根本没用到Designer,但是对于使用Designer的项目,将qwt控件在Designer中显示以供直接拖拽使用是一个不错的选择。

安装插件很简单,只要将qwt/6.1.2/plugins目录下的libqwt_designer_plugin.so文件复制到Creator或Designer的插件目录下即可。作为参考,在博主的Ubuntu下插件目录分别为:
Creator:/opt/qtcreator-2.5.0/bin/designer
Designer:/usr/lib/i386-linux-gnu/qt4/plugins/designer

操作完成后,打开Creator或Designer,就可以在控件列表中看到qwt控件了

在工程中使用qwt控件

在Qt Creator中新建一个包含.ui文件的工程,然后直接在设计器界面,随便拖放一个qwt控件到对话框中,点击build进行编译,这时候会提示诸如qwt_xxx.h头文件未找到的错误,这是因为qwt控件的头文件和库文件没有被找到。

解决方法很简单,打开pro工程文件,在文件尾部加入如下一段即可:

#qwt setting

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

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

#end qwt setting

实际上这也是官方说明文档中提倡的使用qwt控件的方法,但需注意,qwt文档中写的是
include ( ${QWT_ROOT}/features/qwt.prf ) ,只有1个$符号,这是无法生效的,应当使用2个$$符号。

pro文件修改完成后,重新点击build按钮,即可成功编译。

编译成功后,点击运行run按钮,会发现运行出错,提示找不到libqwt.so库文件,这是因为我们使用qwt动态链接库的方式编译程序的,而系统运行环境(注意与编译环境的区别)中却没有将qwt动态库的位置添加进来,最简单的方法是直接修改Qt Creator的Run Environment,在其LD_LIBRARY_PATH中增加qwt动态库的绝对路径/usr/local/qwt-6.1.2/lib即可。

路径设置成功后,点击Creator中的Run按钮,即可成功运行程序看到qwt控件的效果了。

注: 实际上,运行时找不到库文件还有一个很好的解决办法,就是使用Qt参数:QMAKE_RPATHDIR,这个参数的官方解释是:This is used on Unix platforms only. A list of library directory paths, these paths are added to the executable at link time so that the paths will be preferentially searched at runtime.
意思就是在Unix平台下,这个参数可以在程序链接阶段就将运行阶段所需的动态库的存放路径信息写入可执行文件中,这样在程序运行时会优先从该路径下寻找需要的动态库文件。显然,此方式非常适用于在程序设计时就确定用户会把所需动态库安装在某一特定目录下的情况,或者是程序权限不足只能将动态库安装至用户的非常规库路径下的情况。qwt配置文件直接支持了这种方式,但并不是默认配置。配置方式是,打开/usr/local/qwt-6.1.2/features/qwt.prf文件,将倒数第二行的# QMAKE_RPATHDIR *= $${QWT_INSTALL_LIBS}前面的#号注释符删去,重新编译即可,这样就无需在运行环境中设置LD_LIBRARY_PATH了。

以上简单介绍了Ubuntu下编译安装qwt的过程,下一篇文章将会介绍如何交叉编译qwt并在Mini2440开发板上运行。

参考资料:
Qwt User’s Guide: Installing Qwt
Variables | qmake Manual
ldconfig到底什么时候需要运行,什么时候不需要?

你可能感兴趣的:(linux,ubuntu,编译qwt,qwt控件)