很有可能某一天,在程序里面你會(huì)需要用到一些函數(shù),比如 Γ 函數(shù),β 函數(shù),還有普通的對(duì)數(shù)吖之類(lèi)的,你會(huì)想到什么,不會(huì)是#include <math.h>吧?計(jì)算機(jī)科學(xué)發(fā)展了這么多年,已經(jīng)有了許許多多優(yōu)秀的科學(xué)計(jì)算的函數(shù)庫(kù),涵蓋了各種方面,你所要做的,就是導(dǎo)入它們,把參數(shù)代入,然后等待結(jié)果,呵呵。忘掉那個(gè)又大,又慢,又難看,又難操作的MatLab吧(軟件要是都象工程或者科學(xué)軟件那樣來(lái)開(kāi)發(fā),也就是只講功能,根本不管不顧使用者的習(xí)慣或者難受程度,計(jì)算機(jī)行業(yè)早就倒閉了……)
下面的文字默認(rèn)你已經(jīng)熟練掌握了各種C++編譯器尤其是MinGW的命令行編譯,當(dāng)然,如果你bs windows并且在linux下面編譯大規(guī)模源代碼得心應(yīng)手,那……
目前號(hào)稱(chēng)有三大庫(kù)支持科學(xué)計(jì)算,它們是GNU的gsl,blitz++以及MTL,我們這里要使用GNU的gsl來(lái)做科學(xué)計(jì)算gsl可以在http://www.gnu.org下載,不過(guò)不是bin發(fā)布,還要自己編譯,而且對(duì)windows的支持不好。
我們可以在這里得到可以在MingW下面用的Lib版本的gsl,它是:
http://gnuwin32.sourceforge.net/packages/gsl.htm
這里下載兩個(gè)文件就可以支持windows下的編程,分別是gsl-1.8-bin.zip和gsl-1.8-dev.zip(版本號(hào)今后可能會(huì)變),bin里面提供了dll,dev里面提供了頭文件和lib(這里只有.a格式的lib,所以不支持VC只支持MingW),把頭文件復(fù)制到MingW的include目錄里面去,把lib(兩個(gè).a文件:libgsl.a和libgslcblas.a)放到你的源代碼的同一個(gè)目錄下面,然后就可以在程序里面調(diào)用gsl的函數(shù)了!
下面是例子
#include <iostream>
#include <gsl/gsl_sf.h>
int main()
{
std::cout << gsl_sf_gamma_inc( 1.5, 0.5 ) << std::endl;
std::cout << gsl_sf_gamma_inc_Q( 1.5, 0.5 ) << std::endl;
std::cout << gsl_sf_gamma_inc_P( 1.5, 0.5 ) << std::endl;
}
如果想要在VC編譯器下面用gsl,也可以到這里下載lib庫(kù)文件 http://www6.in.tum.de/~kiss/WinGsl.htm
WinGsl
Windows vesrsion of the GNU Scientific Library
Description
Here you will find a MS-VC++ adaptation of the GNU gsl-1.4 library. It's free in the sense of GNU licensing scheme.
You have the choice to download the complete set of source code and compile yourself or download just the divcompiled static/dynamic libraries.
Versions
WinGsl-1.4.xx
Contain the complete set of free source code, help and samples based on gsl-1.4, necessary to compile and use the scientific library under Windows with MS-VC++ 6.0 / 7.0
WinGsl-1.4.01 / 09.07.2004 First release. ( ~3.6 MB)
WinGsl-1.4.02 / 11.08.2004 Current version.
WinGsl-Lib-1.4.xx
Contains a ready-to-use set of static and dynamic libraries generated from WinGsl-1.4.xx.
WinGsl-Lib-1.4.01 / 09.07.2004 First release. ( ~16.8 MB, VC++ 6.0)
WinGsl-Lib-1.4.02 / 11.08.2004 Current version ( VC++ 6.0).
WinGsl-Lib-1.4.03 / 27.08.2004 Current version ( .NET 2003).
雖然版本有點(diǎn)老,但是應(yīng)該夠用了。
附帶兩篇轉(zhuǎn)載文章,對(duì)原作者表示感謝:
---------------------------------------------------------------------------------------------------------------------
GNU數(shù)學(xué)函數(shù)庫(kù)gsl在windows下的移植
1.gsl在dev-c++下的移植:
(1)下載gsl-1.8.exe: http://gnuwin32.sourceforge.net/packages/gsl.htm
(2)安裝gsl,安裝后在安裝目錄下將有如下目錄
\contrib\gsl-1.8 一些說(shuō)明文件
\bin 二進(jìn)制文件
libgsl.dll gsl的動(dòng)態(tài)鏈接庫(kù)(基于gcc的正式版本)
libgsl_d.dll gsl的動(dòng)態(tài)鏈接庫(kù)(基于gcc的調(diào)試版本)
libgslcblas.dll cblas的動(dòng)態(tài)鏈接庫(kù)(基于gcc的正式版本)
libgslcblas_d.dll cblas的動(dòng)態(tài)鏈接庫(kù)(基于gcc的調(diào)試版本)
gsl-histogram.exe 用于計(jì)算數(shù)據(jù)直方圖的程序
gsl-randist.exe 用于生成服從指定分布數(shù)據(jù)的程序
\lib 庫(kù)文件
libgsl.a gsl的靜態(tài)鏈接庫(kù)(基于gcc的正式版本)
libgsl_d.a gsl的靜態(tài)鏈接庫(kù)(基于gcc的調(diào)試版本)
libgslcblas.a cblas的靜態(tài)鏈接庫(kù)(基于gcc的正式版本)
libgslcblas_d.a cblas的靜態(tài)鏈接庫(kù)(基于gcc的調(diào)試版本)
libgsl_dll.a libgsl.dll的gcc輸入庫(kù)
libgsl_d_dll.a libgsl_d.dll的gcc輸入庫(kù)
libgslcblas_dll.a libgslcblas.dll的gcc輸入庫(kù)
libgslcblas_d_dll.a libgslcblas_d.dll的gcc輸入庫(kù)
libgsl.def 輸出libgsl.dll的定義
libgslcblas.def 輸出libgslcblas.dll的定義
\doc 有關(guān)文檔
\info
\man1
\man3
各種格式的gsl幫助文件
\include\gsl 頭文件
gsl include files
其中使用到的主要有bin,lib,include\gsl下的文件
(3)設(shè)置dev-c++編譯環(huán)境,有兩種方式:
一、這種最簡(jiǎn)單,將gsl安裝目錄下的bin下libgsl.dll,libgslcblas.dll復(fù)制到dev-c++安裝目錄下的bin目錄下;lib下libgsl.a,libgslcblas.a復(fù)制到dev-c++安裝目錄下的lib目錄下;include下的整個(gè)gsl文件夾復(fù)制到dev-c++安裝目錄下的include目錄下。打開(kāi)dev-c++,工具-編譯選項(xiàng)-編譯器,選上“在連接器命令行加入如下命令”,加入-lgsl -lgslcblas(即在連接時(shí)連上libgsl.a,libgslcblas.a,gcc可以自動(dòng)識(shí)別前綴lib和后綴.a)
#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>
int main(void)
{
double x = 5.0;
double y = gsl_sf_bessel_J0(x);
printf("J0(%g) = %.18en", x, y);
system("pause");
return 0;
}
移植可以正常運(yùn)行。
二、打開(kāi)dev-c++,工具-編譯選項(xiàng)-目錄,分別將gsl安裝目錄下的lib,include加入到庫(kù)和頭文件的路徑中。最后,在編譯器選項(xiàng)中,選中“在連接器命令行加入如下命令”,加入-lgsl -lgslcblas,即可以正常使用gsl。
2.gsl在Visual C++ 6.0下的移植
(1)下載WinGsl-Lib-1.4.02.zip : http://www6.in.tum.de/~kiss/WinGsl.htm
(2)解壓到臨時(shí)目錄,WinGsl中的庫(kù)文件的擴(kuò)展名是.lib,可用于Visual C++ 6.0 的編譯器
(3)設(shè)置Visual C++ 6.0編譯環(huán)境,有兩種方式:
一、將臨時(shí)目錄下bin中的WinGsl.dll和WinGslD.dll復(fù)制到~\Microsoft Visual Studio\VC98\Bin下;整個(gè)Gsl目錄復(fù)制到~\Microsoft Visual Studio\VC98\Include下;lib目錄下的所有.lib文件全部復(fù)制到~\Microsoft Visual Studio\VC98\Lib下。在使用gsl函數(shù)時(shí),在新建的工程中,project-settings-link,在object/library modules中加入你用到的庫(kù)文件,如WinGsl.lib等,加入多個(gè)可以用空格隔開(kāi)。
二、打開(kāi)VC,tools-options-directories,將解壓目錄下的lib,gsl分別加入到庫(kù)文件和頭文件的搜索路徑中,將WinGsl.dll和WinGslD.dll復(fù)制到~\Microsoft Visual Studio\VC98\Bin下。在新建的工程中將你所使用到的庫(kù)文件加入到object/library modules。
---------------------------------------------------------------------------------------------------------------------
GSL 在 Windows開(kāi)發(fā)環(huán)境下的使用
2005-9-11
GSL(GNU Scientific Library)是一個(gè)非常不錯(cuò)的科學(xué)計(jì)算函數(shù)庫(kù),本站前面已經(jīng)有文章對(duì)此做過(guò)介紹,本文將主要介紹在Win32平臺(tái)三個(gè)不同的開(kāi)發(fā)環(huán)境下如何使用這個(gè)軟件庫(kù)
首先下載GSL win32的套裝程序,地址在gnuwin32 GSL需要下載 Binaries 和 Developer files 。下載后解壓到一個(gè)目錄D:\temp中,然后開(kāi)始進(jìn)入下面的步驟。
下面介紹三個(gè)不同的開(kāi)發(fā)環(huán)境:MingW、Visual C++ 7.0 和 Borland C++ Builder。
一、MingW
首先將D:\temp下bin目錄中的兩個(gè)dll動(dòng)態(tài)鏈結(jié)庫(kù)(libgsl.dll和libgslcblas.dll)復(fù)制到 mingw 的 bin 目錄中(gcc路徑必須在 PATH 中)或者乾脆直接復(fù)制到 C:\Windows 或者 C:\Windows\system32 中,總之是程序運(yùn)行的話必須可以找到這兩個(gè)動(dòng)態(tài)鏈結(jié)庫(kù)。
再將 D:\temp\include\ 下 gsl 目錄完整復(fù)制到 mingw 的 include 目錄中去,這些全是頭文件,開(kāi)發(fā)程序時(shí)必須會(huì)用到的。然后將 D:\temp\lib 下的 libgsl.a 和 libgslcblas.a 復(fù)制到 mingw 的 lib 目錄下。
現(xiàn)在一切都準(zhǔn)備好了,可以嘗試編譯一個(gè)測(cè)試程式看看是否運(yùn)行正常,這樣的話,整個(gè)開(kāi)發(fā)過(guò)程與 Linux 下開(kāi)發(fā) GSL 程序完全一樣。
編譯命令是:
gcc test.c -o text.exe -lgsl
二、Visual C++ 7.0
如前所述,需要先將那兩個(gè)動(dòng)態(tài)鏈結(jié)庫(kù)復(fù)制到PATH路徑中的目錄下,然后復(fù)制D:\temp\include\ 下 gsl 目錄到 Visual C++ 的 Include 目錄下,再將 D:\temp\lib 下的 libgsl.lib 和 libgslcblas.lib 復(fù)制到 Visual C++ 的 lib 目錄下。
這樣準(zhǔn)備工作就做完了,下來(lái)拿一個(gè)簡(jiǎn)單的程序來(lái)測(cè)試:
編譯命令是:
cl test.c /link libgsl.lib用IDE時(shí)則是需要將這兩個(gè)lib檔加到 link 參數(shù)中去即可。
三、Borland C++ Builder
依然同前,需要先將那兩個(gè)動(dòng)態(tài)鏈結(jié)庫(kù)復(fù)制到PATH路徑中的目錄下,然后復(fù)制D:\temp\include\ 下 gsl 目錄到 Borland C++ Builder 的 Include 目錄下。
下來(lái)的步驟稍有麻煩,進(jìn)入那兩個(gè)dll所在目錄,用BCB所帶的 implib 工具產(chǎn)生2個(gè)需要用到的 lib 文件,命令如下:
implib -af libgsl.lib libgsl.dll
implib -af libgslcblas.lib libgslcblas.dll然后將這兩個(gè)lib文件復(fù)制到 BCB 的 lib 目錄下即可。D:\teml\lib 下的 libgsl-bcc.lib 和 libgslcblas-bcc.lib 經(jīng)過(guò)我試驗(yàn)在BCB編譯中不可用。只能用implib產(chǎn)生的lib檔。
現(xiàn)在開(kāi)始測(cè)試,編譯命令:
bcc32 test.c libgsl.lib命令行是如此,如果你用BCB的IDE的話,就更簡(jiǎn)單了,將這兩個(gè)lib文件名加到編譯參數(shù)中就可以了。
事情的經(jīng)過(guò)就這么簡(jiǎn)單。
下面是test.c的源碼
#include <stdio .h>
#include <gsl /gsl_sf_bessel.h>
int main (void)
{
double x = 5.0;
double y = gsl_sf_bessel_J0(x);
printf ("J0(%g) = %.18en", x, y);
return 0;
}
聯(lián)系客服