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所示。
图1 Makefile内容4、执行make命令并运行程序:
$ make && ./array_test
5、加入程序编译不报错并能够正确运行,说明itpp库已经安装完成
图2 测试程序运行结果
四、QT5工程配置itpp
通过上面的例程可以看出itpp库已经正确安装,但是编译命令与我们常规所熟知的Makefile命令有所不同。通过分析itpp-config文件可知,这里的Makefile其实是在编译命令中嵌入了shell命令。itpp-config文件的分析结果如图3所示,那么我们仅仅需要将图3的编译选项配置到QT5的工程即可。
图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所示。
图4 itpp.pri配置文件内容
4.3、修改itppTest.pro文件
在itppTest.pro文件中添加itpp.pri文件的包含关系,itppTest.pro的配置内容如图5所示。
图5 itppTest.pro配置文件
4.4、修改main.cpp文件
将array_test.cpp中的代码添加进入main.cpp,从而用于测试QT5工程中的itpp配置是否成功。注意需要头文件的添加,最终main.cpp文件内容如图6所示。
图6 main.cpp代码内容
4.5、编译运行
将itppTest工程进行编译并运行,运行结果如图7所示。
图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日