GSL(GNU Scientific Library)是一个 C 写成的用于科学计算的库,有超过1000个函数,该库提供了关于数学计算的很多方面,Matlab的大部分函数几乎都能借助它实现,可以在数值计算中省却很多事情。关于GSL的详细功能。GSL的功能及相关头文件的介绍可以见此偏文章:http://blog.csdn.net/augusdi/article/details/8834182,或者看看这位仁兄的blog:http://www.cnblogs.com/Jedimaster/archive/2008/06/22/1227656.html , GSL说明文档的目录翻译见这里:http://blog.csdn.net/yruilin/article/details/3986844 ,大家在需要实现某个数学功能的时候,不妨先参考参考GSL。
GSL的在Windows平台下的配置有好多文章,像常用的vc6到vs2010,都有许多参考文章,这里就不一一罗列,大家谷歌或百度一下都可以找到,但是唯独没有Qt环境下的配置(至少我没看到),虽然Qt和vs下配置大同小异,但是为了方便各位,还是觉得有必要写一篇进行说明。
下载地址:http://gnuwin32.sourceforge.net/packages/gsl.htm
这个页面下有6个内容可以下载,省事直接下载第一个“Complete package, except sources”即可。不想安装包的可以下载“Binaries”和“Developer files”,这两个里面包含了编译好的dll以及.a和def文件(唯独没有lib~~)。如果此网被墙,可以见此文最后的附件。
无论怎么下载,gsl的目录都如下图所示:
我们将会用到“bin”目录下的dll,“lib”目录下的……def文件,(官方没有提供lib文件……),以及“include”目录下的头文件
由于官方没有提供lib文件,因此需要自己生成,通过def文件生成lib文件的方法有很多,百度谷歌一大堆,这里还是说一下:
1. 开始菜单,点击运行,输入cmd
2.进入gsl库的lib目录下依次输入以下两条语句:
lib /machine:i386 /def:libgsl.def
lib /machine:i386 /def:libgslcblas.def
再看lib目录下,发现有了libgsl.lib,libgslcblas.lib这两个文件。
有dll,有lib,有头文件。万事具备,就差qmake了。
开发的过程中只需要用到“lib”目录下的libgsl.lib,libgslcblas.lib这两个lib文件,以及include目录下的头文件。运行时需要用到bin目录下的两个dll文件,为了程序开发的扩展性,我们可以直接在需要用到gsl的工程目录中新加gsl文件夹,在这个文件夹里把include文件夹和lib文件夹拷贝过去。
上图所示:在某工程里建立一个gsl文件夹,把include和lib文件拷贝到此文件夹下,此时结构如下:
project
|_gsl
|_include
| |_gsl
| |_头文件
|_lib
|_ libgsl.lib 、libgslcblas.lib
为了能导入include里的头文件需要在pro文件中如下写:
INCLUDEPATH += $$PWD\gsl\include
LIBS += -L$$PWD\gsl\lib -llibgsl
LIBS += -L$$PWD\gsl\lib -llibgslcblas
这样就可以使用GSL了,非常简单。但是,有些函数需要使用dll,因此,为了不带来不必要的麻烦,需要预定义宏GSL_DLL,因此上面的pro文件应该如下写:
DEFINES += GSL_DLL
INCLUDEPATH += $$PWD\gsl\include
LIBS += -L$$PWD\gsl\lib -llibgsl
LIBS += -L$$PWD\gsl\lib -llibgslcblas
可以试试下面的代码:
H:
#include
#include
int main()
{
double x =5.0;
double y =gsl_sf_bessel_J0 (x);
cout<< "J0("<< x <<") = " << y<< endl;
return0;
}
得益于qmake,可以非常简单的组织项目结构。为了方便以后调用,我们可以写好一个gsl.pri文件放在gsl目录下,以后使用只需要include($$PWD/gsl/gsl.pri)即可。
DEFINES += GSL_DLL#此句不加将会遇到一些连接错误
INCLUDEPATH += $$PWD\include
DEPENDPATH += $$PWD
LIBS += -L$$PWD\lib -llibgsl
LIBS += -L$$PWD\lib -llibgslcblas