GSL under Windows[轉]

很有可能某一天,在程序裏面你會需要用到一些函數,比如 Γ 函數,β 函數,還有普通的對數吖之類的,你會想到什麼,不會是#i nclude <math.h>吧?計算機科學發展了這麼多年,已經有了許許多多優秀的科學計算的函數庫,涵蓋了各種方面,你所要做的,就是導入它們,把參 數代入,然後等待結果,呵呵。忘掉那個又大,又慢,又難看,又難操作的MatLab吧(軟件要是都象工程或者科學軟件那樣來開發,也就是隻講功能,根本不 管不顧使用者的習慣或者難受程度,計算機行業早就倒閉了……)

       下面的文字默認你已經熟練掌握了各種C++編譯器尤其是MingW的命令行編譯,當然,如果你bs windows並且在linux下面編譯大規模源代碼得心應手,那……

              目前號稱有三大庫支持科學計算,它們是GNU的gsl,blitz++以及MTL,我們這裏要使用GNU的gsl來做科學計算。
             gsl可以在下載,不過不是bin發佈,還要自己編譯,而且對windows的支持不好
我們可以在這裏得到可以在MingW下面用的Lib版本的gsl,它是:
            這裏下載兩個文件就可以支持windows下的編程,分別是gsl-1.8-bin.zip和gsl-1.8-dev.zip(版本號今後可能 會變),bin裏面提供了dll,dev裏面提供了頭文件和lib(這裏只有.a格式的lib,所以不支持VC只支持MingW),把頭文件複製到 MingW的include目錄裏面去,把lib(兩個.a文件:libgsl.a和libgslcblas.a)放到你的源代碼的同一個目錄下面,然後 就可以在程序裏面調用gsl的函數了!
下面是例子

#i nclude <iostream>
#i nclude <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庫文件
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 precompiled 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).

雖然版本有點老,但是應該夠用了。
附帶兩篇轉載文章,對原作者表示感謝:
---------------------------------------------------------------------------------------------------------------------
GNU數學函數庫gsl在windows下的移植
1.gsl在dev-c++下的移植:
(1)下載gsl-1.8.exe:

(2)安裝gsl,安裝後在安裝目錄下將有如下目錄
\contrib\gsl-1.8 一些說明文件
\bin 二進制文件
     libgsl.dll             gsl的動態鏈接庫(基於gcc的正式版本)
     libgsl_d.dll           gsl的動態鏈接庫(基於gcc的調試版本)
     libgslcblas.dll        cblas的動態鏈接庫(基於gcc的正式版本)
     libgslcblas_d.dll      cblas的動態鏈接庫(基於gcc的調試版本)
     gsl-histogram.exe      用於計算數據直方圖的程序
     gsl-randist.exe        用於生成服從指定分佈數據的程序
\lib 庫文件
     libgsl.a                gsl的靜態鏈接庫(基於gcc的正式版本)
     libgsl_d.a              gsl的靜態鏈接庫(基於gcc的調試版本)
     libgslcblas.a           cblas的靜態鏈接庫(基於gcc的正式版本)
     libgslcblas_d.a         cblas的靜態鏈接庫(基於gcc的調試版本)
     libgsl_dll.a            libgsl.dll的gcc輸入庫
     libgsl_d_dll.a          libgsl_d.dll的gcc輸入庫
     libgslcblas_dll.a       libgslcblas.dll的gcc輸入庫
     libgslcblas_d_dll.a     libgslcblas_d.dll的gcc輸入庫
     libgsl.def              輸出libgsl.dll的定義
     libgslcblas.def         輸出libgslcblas.dll的定義
\doc 有關文檔
\info
\man1
\man3
     各種格式的gsl幫助文件
\include\gsl 頭文件
     gsl include files
     其中使用到的主要有bin,lib,include\gsl下的文件
(3)設置dev-c++編譯環境,有兩種方式:
一、 這種最簡單,將gsl安裝目錄下的bin下libgsl.dll,libgslcblas.dll複製到dev-c++安裝目錄下的bin目錄下;lib 下libgsl.a,libgslcblas.a複製到dev-c++安裝目錄下的lib目錄下;include下的整個gsl文件夾複製到dev- c++安裝目錄下的include目錄下。打開dev-c++,工具-編譯選項-編譯器,選上“在連接器命令行加入如下命令”,加入-lgsl -lgslcblas(即在連接時連上libgsl.a,libgslcblas.a,gcc可以自動識別前綴lib和後綴.a)
#i nclude <stdio.h>
#i nclude <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;
}移植
可以正常運行。
二、打開dev-c++,工具-編譯選項-目錄,分別將gsl安裝目錄下的lib,include加入到庫和頭文件的路徑中。最後,在編譯器選項中,選中“在連接器命令行加入如下命令”,加入-lgsl -lgslcblas,即可以正常使用gsl。
2.gsl在Visual C++ 6.0下的移植
(1)下載WinGsl-Lib-1.4.02.zip

(2)解壓到臨時目錄,WinGsl中的庫文件的擴展名是.lib,可用於Visual C++ 6.0 的編譯器

GNU Scientific Library (GSL)是一個內含許多數值及科學運算函式的C/C++函式庫,內含超過1000個以上的函式(例如︰數值微分、小波轉換、排序..等等) ,並且可以使用在各種作業系統平臺。
在GSL在Windows開發環境下的使用中有簡單說明如何在Windows環境使用GSL ,以下則是再詳細一點介紹如何在Visual C++ 6.0的IDE (整合型視窗介面)下使用︰

1.首先到http://gnuwin32.sourceforge.net/packages/gsl.htm下載Binaries、Developer files 。
2.將Binaries package內bin子目錄下的libgsl.dll, libgslcblas.dll兩個檔案複製到C:\Windows\System32中。
3.將Developer files解壓縮後,在VC的IDE中設定include, lib子目錄的路徑。
4.由於此版本的lib子目錄中不含.lib檔,必須用以下指令產生。請先開啓DOS模式視窗(附屬應用程式/命令提式字元),切換目錄到lib目錄下,並下達︰

     lib /machine:i386 /def:libgsl.def
     lib /machine:i386 /def:libgslcblas.def

即可產生libgsl.lib, libgslcblas.lib兩個檔案。
5.在VC專案中加入libgsl.lib, libgslcblas.lib這2個lib到link參數中。
6.在VC專案的Preprocessor definitions中加入GSL_DLL。
6.可用函式及說明請見Reference Manual 。



(3)設置Visual C++ 6.0編譯環境,有兩種方式:
一、 將臨時目錄下bin中的WinGsl.dll和WinGslD.dll複製到~\Microsoft Visual Studio\VC98\Bin下;整個Gsl目錄複製到~\Microsoft Visual Studio\VC98\Include下;lib目錄下的所有.lib文件全部複製到~\Microsoft Visual Studio\VC98\Lib下。在使用gsl函數時,在新建的工程中,project-settings-link,在object/library modules中加入你用到的庫文件,如WinGsl.lib等,加入多個可以用空格隔開。
二、打開 VC,tools-options-directories,將解壓目錄下的lib,gsl分別加入到庫文件和頭文件的搜索路徑中,將 WinGsl.dll和WinGslD.dll複製到~\Microsoft Visual Studio\VC98\Bin下。在新建的工程中將你所使用到的庫文件加入到object/library modules。

--------------------------------------------

---------------------------------------------------------------------------------------------------------------------
GSL 在 Windows開發環境下的使用
2005-9-11
GSL(GNU Scientific Library)是一個非常不錯的科學計算函數庫,本站前面已經有文章對此做過介紹,本文將主要介紹在Win32平臺三個不同的開發環境下如何使用這個軟件庫
首先下載GSL win32的套裝程序,地址在gnuwin32 GSL需要下載 Binaries 和 Developer files 。下載後解壓到一個目錄D:\temp中,然後開始進入下面的步驟。
下面介紹三個不同的開發環境:MingW、Visual C++ 7.0 和 Borland C++ Builder。
一、MingW
首先將D:\temp下bin目錄中的兩個dll動態鏈結庫(libgsl.dll和libgslcblas.dll) 複製到 mingw 的 bin 目錄中(gcc路徑必須在 PATH 中)或者乾脆直接複製到 C:\Windows 或者 C:\Windows\system32 中,總之是程序運行的話必須可以找到這兩個動態鏈結庫。
再將 D:\temp\include\ 下 gsl 目錄完整複製到 mingw 的 include 目錄中去,這些全是頭文件,開發程序時必須會用到的。然後將 D:\temp\lib 下的 libgsl.a 和 libgslcblas.a 複製到 mingw 的 lib 目錄下。
現在一切都準備好了,可以嘗試編譯一個測試程式看看是否運行正常,這樣的話,整個開發過程與 Linux 下開發 GSL 程序完全一樣。
編譯命令是:
gcc test.c -o text.exe -lgsl

-----------------------------------------

二、Visual C++ 7.0
如前所述,需要先將那兩個動態鏈結庫複製到PATH路徑中的目錄下,然後複製D:\temp\include\ 下 gsl 目錄到 Visual C++ 的 Include 目錄下,再將 D:\temp\lib 下的 libgsl.lib 和 libgslcblas.lib 複製到 Visual C++ 的 lib 目錄下。
這樣準備工作就做完了,下來拿一個簡單的程序來測試:
編譯命令是:
cl test.c /link libgsl.lib用IDE時則是需要將這兩個lib檔加到 link 參數中去即可。

----------------------------------------------
三、Borland C++ Builder
依然同前,需要先將那兩個動態鏈結庫複製到PATH路徑中的目錄下,然後複製D:\temp\include\ 下 gsl 目錄到 Borland C++ Builder 的 Include 目錄下。
下來的步驟稍有麻煩,進入那兩個dll所在目錄,用BCB所帶的 implib 工具產生2個需要用到的 lib 文件,命令如下:
implib -af libgsl.lib libgsl.dll
implib -af libgslcblas.lib libgslcblas.dll然後將這兩個lib文件複製到 BCB 的 lib 目錄下即可。D:\teml\lib 下的 libgsl-bcc.lib 和 libgslcblas-bcc.lib 經過我試驗在BCB編譯中不可用。只能用implib產生的lib檔。
現在開始測試,編譯命令:
bcc32 test.c libgsl.lib命令行是如此,如果你用BCB的IDE的話,就更簡單了,將這兩個lib文件名加到編譯參數中就可以了。
事情的經過就這麼簡單。
下面是test.c的源碼

#i nclude <stdio .h>
#i nclude <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;
}

以便自己學習之用,網絡地址:http://hi.baidu.com/yyhsci/blog/item/3ef005c74b3ddcd738db49c1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章