VS2012和GSL数值计算库配置

来源:互联网 发布:房天下 源码 编辑:程序博客网 时间:2024/04/30 12:35

由于要将自己算法转换成C++版本的在实际中使用,算法中有解非线性方程,向量,矩阵运算等等,C++中可没有这些东东,自己编写,呵呵。最后找来找去,发现有用来数值计算的C库,我们可以下载并且调用相关的库。网上相关的C++库很多,但是比较全面的,既能做线性运算,又能非线性运算,复数运算,一些优化算法,变换方法等等的C库还真不多,GSL是公认的比较好的。其他的库要么只能线性运算,要么就是有各种问题,虽然GSL效率不是最好的,但是还可以用,再说其中包含的计算功能很多,如下表所列:



功能还是很全的,有这个库,在C++下实现算法还是很有利的。好了,废话这么多,接下来说明如何配置这个库,在网上找了诸多资料,说的都不详细,或者就是时间太久了,基本都是在32位XP系统下做的配置,在64位windows7电脑上无法工作也看到有很多网友留言,这个库很难配置成功,基本上没成功使用。接下来我就一步步解释如何配置这个库:    (1) 下载在windows下使用的GSL库,地址:

http://gnuwin32.sourceforge.net/packages/gsl.htm

下载如下图片中所示的两个文件:

(Complexpackage, except sources Setup, Sourece Setup)



下载完成后就是安装,这个不必说了,我的安装路径是:D:\Program Files (x86)\GnuWin32

 

(2)安装完成后,在目录D:\ProgramFiles (x86)\GnuWin32\src\gsl\1.8\gsl-1.8\VC8下找到libgsl.sln文件,然后打开,如下图:在资源管理器中可以看到如下4个项目。




(3)把该工程的四个项目的四个版本,(即上图所示)版本全部编译(重新生成)一遍:(相当于重新生成16遍,可能有点慢),如下图:



(4)然后到该项目对应的生成的lisgsl和libgslcblas文件夹下(在路径D:\ProgramFiles (x86)\GnuWin32\src\gsl\1.8\gsl-1.8\VC8),找对应的Debug-DLL,Debug-StaticLib,Release-DLL,Release-StaticLib,把其中所有的.lib(共8个)和.dll(共4个)文件考出来,其中.lib(共八个)文件拷贝到和src同一级的lib文件中,.dll文件 (共四个)放到你的环境目录可访问(如system32)或你的工程文件中。例如我的lib文件就放入和src同一级的lib文件中了,dll文件我也放入其中了。








接下生成就OK了,现在生成了可以供我们自己电脑使用的dll和 lib库了,接下来配置。

(5)添加环境变量到:



(6)新建一个win32控制台应用程序,在项目属性里面配置:

VC++目录:(按照自己的安装路径添加)

可执行文件:D:\Program Files (x86)\GnuWin32\bin

包含文件:D:\Program Files (x86)\GnuWin32\include

库目录:D:\Program Files (x86)\GnuWin32\lib

源目录:D:\ Program Files (x86)\GnuWin32\src\gsl\1.8\gsl-1.8



连接器----输入----附加依赖项:添加 libgsl.lib;libgslcblas.lib;libgsl_d.lib;libgslcblas_d.lib



OK,现在就配置完成了。我们可以写一个例子来看看了。

由于GSL计算能力好,但是显示计算结果非常不方便,于是有人开发了基于GSL的MYGSL数值计算库,已经都编译好了lib和dll,但是非常不稳定,此外版本还停留在XP系统的版本上,并且是32位的,好久没跟新了,在64位电脑上用会出现莫名的错误,但是他方便之处是计算的结果很容易显示,这个功能还是正常的,因此我们计算的时候调用GSL库,显示结果的时候调用MYGSL库,当然这也需要配置MYGSL库,如何配置?可以看我以前空间里日志,里面有详细介绍,这里就不重复介绍了。

#include <stdio.h>

#include <gsl/gsl_vector.h>

#include <gsl/gsl_complex_math.h>

 

extern "C"

{

    #include <my++/myhead.h>

}

 

int main(void)

{

    gsl_vector_complex*x=gsl_vector_complex_alloc(1);

    gsl_complexy=gsl_complex_rect(3,4);

    gsl_vector_complex_set(x,0,y);

    printline(30);

    printComplex(y);

    printline(30);

   

    gsl_vector_complex_free(x);

    return 0;

}

运行结果如下:这里就是一个简单的例子,定义并且显示一个复数。配置完成后,OK,骚年们,开始编程吧。


0 0
原创粉丝点击