QT5环境下配置itpp数学库

QT5环境下配置itpp数学库


这两天一直在捣鼓如何在QT5中添加开源数学库,从而减少算法的代码量。前天使用mingw/msys工具已经成功在QT5中添加了GSL数学库,查阅GSL的使用手册,发现GSL库的函数还是不大友好。GSL库虽然包含了许多的科学计算函数,但是矩阵运算及信号处理类函数封装较少,需要自己手动重写。

IT++库设计的初衷就是用于通信系统仿真,里面含有丰富的通信系统所需的库函数,比如CRC模块、编译码模块、调制模块、矩阵运算模块及滤波器模块。这些模块是开发通信系统的基础,并且函数封装较为完整。因此,对于从事水声通信信号处理的我而言,采用这个数学库更为合适。

IT++库在Ubuntu linux环境中添加极为方便,直接使用sudo apt-get install libitpp-dev命令安装即可,在Windows Visual Studio环境下配置此数学库也有一大堆资料可供查询。在QT5环境下配置IT++数学库,资料很少很少,同级和师兄们均做过尝试,均以失败告终,因此从这个角度来看配置itpp数学库存在一定的挑战性。


一、配置想法

在IT++官网上提及了此函数库能够支持大多数编译器,其中就包括QT5.9所使用的mingw编译器。而QT5所有的库函数均由mingw进行编译,因此itpp库必然能够被QT5所支持,并且GSL库的配置也正是基于这样的原理。简而言之,只要mingw能够正确编译itpp,那么QT5.9就能够配置itpp,能够配置成功主要在于如何配置QT5的编译选项。

从另一方面来考虑这个问题,mingw的设计初衷是为了便于linux中的程序移植到windows中。mingw从本质上来说是安装在windows环境下的gnu编译器,因此使用方式与linux的gcc编译器完全相同。而itpp数学库能够被gcc编译器编译,那么对应的在mingw环境下也是能够采用相同方式编译。

采用mingw/msys环境编译itpp与linux环境保持一致,这样便于我们分析如何在QT5中配置itpp。至此,QT5肯定能够配置itpp的结论已经很清楚了,因此接下来就开始配置itpp数学库。


二、配置工具

在配置之前需要预先获得一系列工具,具体包括mingw/msys、FFTW源代码、LAPACK源代码和itpp源代码。其中mingw/msys工具的配置过程可以直接百度,网上相关教程较多,或者直接参阅我所撰写的《QT5下配置GSL数学库》,在这里关于这个该如何操作不作赘述。下面给出fftw、lapack和itpp的源代码下载网址及所采用的版本号,大家在配置前请自行下载,如果网址不能进入,请使用翻墙工具。

fftw-3.3.2:http://www.fftw.org/
lapack-3.7.1:http://www.netlib.org/lapack/
itpp-4.0.6:https://sourceforge.net/projects/itpp/files/itpp/

因为在编译itpp库时需要fftw、lapack以及blas库的支持,所以需要先下载对应的支持库,不然编译的结果存在问题。然后在这里需要说明的是之所以不采用itpp最新版,是因为新版本的编译工具是采用cmake。cmake这编译工具没有接触过,并且itpp-4.0.6版本并不需要采用此工具,因此在这里选择了4.0.6版本进行编译。


三、编译IT++

3.1、编译fftw

  • 1,执行以下命令:
    $ cd /d/Qt_mathLib/fftw-3.2.2
  • 2、执行配置命令:
    $ ./configure --prefix=/mingw
  • 3、执行编译命令:
    $ make -j8
  • 4、执行安装命令:
    $ make install
  • 5、在执行make install命令后,进入D:\Qt\Qt5.9.1\Tools\mingw530_32路径,可见lib路径中添加了libfftw3.a和libfftw3.la文件,在include路径下添加了fftw3.h和fftw3.f等文件。假设没有添加,手动添加至相应目录。

3.2、编译lapack

  • 1、进入lapack源文件目录:
    $ cd /d/Qt_mathLib/lapack-3.7.1
  • 2、将make.inc.example重命令为make.inc:
    $ mv make.inc.example make.inc
  • 3、编译blas库:
    $ make blaslib -j8
  • 4、编译lapack库:
    $ make lapacklib -j8
  • 5、将源文件路径下编译的librefblas.a重命名为libblas.a,并将libblas.a和liblapack.a这两个文件拷贝至D:\Qt\Qt5.9.1\Tools\mingw530_32\lib目录下。
  • 6、步骤5可以采用命令行实现:
    $ mv librefblas.a libblas.a
    $ cp libblas.a liblapack.a /d/Qt/Qt5.9.1/Tools/mingw530_32/lib/

3.3、编译itpp

  • 1、进入itpp源文件目录:
    $ cd /d/Qt_mathLib/itpp-4.0.6
  • 2、执行配置命令:
    $ ./configure --prefix=/mingw LDFLAGS="-L/mingw/lib/libblas.a" CPPFLAGS="-I/mingw/include" --with-blas="-lblas" --with-lapack="llapack" --with-fft="-lfftw3"
  • 3、执行编译命令:
    $ make -j8
  • 4、执行检查命令,查看库编译是否完全:
    $ make check
  • 5、执行安装命令:
    $ make install
  • 6、在执行安装命令后,相应的可执行文件、库文件和头文件均存在于D:\Qt\Qt5.9.1\Tools\mingw530_32的子目录中,有关这点不作详细赘述,主要关注编译过程不存在问题即可。

3.4、测试itpp

  • 1、在d:/Qt_mathLib路径下创建一个itpp_test文件夹
  • 2、将d:/Qt_mathLib/itpp-4.0.6/tests/array_test.cpp文件拷贝至新建的itpp_test路径下
  • 3、根据IT++官网上的介绍撰写Makefile文件,参考网址为:
    http://itpp.sourceforge.net/4.3.1/installation.html
    而所撰写的Makefile的内容如图1所示。
    QT5环境下配置itpp数学库
    图1 Makefile内容

  • 4、执行make命令并运行程序:
    $ make && ./array_test

  • 5、加入程序编译不报错并能够正确运行,说明itpp库已经安装完成
    QT5环境下配置itpp数学库
    图2 测试程序运行结果


四、QT5工程配置itpp

通过上面的例程可以看出itpp库已经正确安装,但是编译命令与我们常规所熟知的Makefile命令有所不同。通过分析itpp-config文件可知,这里的Makefile其实是在编译命令中嵌入了shell命令。itpp-config文件的分析结果如图3所示,那么我们仅仅需要将图3的编译选项配置到QT5的工程即可。
QT5环境下配置itpp数学库
图3 itpp-config命令解析

4.1、新建QT5工程

为了测试itpp库能够配置到QT5中,在这里新建一个控制台程序,并且命名为itppTest。有关如何创建QT5的工程,在这里不作赘述,直接百度即可。

4.2、添加itpp.pri文件

在itppTest工程中添加一个空文件,命名为itpp.pri,用于配置itpp的依赖库关系。由于mingw的安装目录为D:\Qt\Qt5.9.1\Tools\mingw530_32,因此相关配置均要指向此目录,配置文件内容如图4所示。
QT5环境下配置itpp数学库
图4 itpp.pri配置文件内容

4.3、修改itppTest.pro文件

在itppTest.pro文件中添加itpp.pri文件的包含关系,itppTest.pro的配置内容如图5所示。
QT5环境下配置itpp数学库
图5 itppTest.pro配置文件

4.4、修改main.cpp文件

将array_test.cpp中的代码添加进入main.cpp,从而用于测试QT5工程中的itpp配置是否成功。注意需要头文件的添加,最终main.cpp文件内容如图6所示。
QT5环境下配置itpp数学库
图6 main.cpp代码内容

4.5、编译运行

将itppTest工程进行编译并运行,运行结果如图7所示。
QT5环境下配置itpp数学库
图7 itppTest工程运行结果


五、结语

至此为止,itpp-4.0.6版本的数学库已经成功嵌入到QT5的工程。后期,仅仅需要在工程中添加itpp.pri文件,这样就省却了配置工具,并且简单易行。在更换主机时,仅仅需要按照手册进行重新配置,或者将依赖库文件打包即可。


参考网页

[1] http://www.fftw.org/ , fftw主页
[2] http://www.netlib.org/lapack/ , lapack主页
[3] https://sourceforge.net/projects/itpp/files/itpp/ , itpp主页
[4] http://itpp.sourceforge.net/4.3.1/installation.html , itpp安装说明


撰写日期:2017年8月6日
修改日期:2017年8月7日
终稿日期:2017年8月8日