一、GSL的下載、安裝
下載地址:http://gnuwin32.sourceforge.net/packages/gsl.htm 下載 Complete package, except sources和Sources兩個exe文件
安裝從下載的兩個文件gsl-1.8.exe和gsl-1.8-src.exe,如我的安裝在:D:\GSL\ 目錄下:
二、設置編譯環境
(1)對於VS2010:
1、生成lib文件。發現安裝目錄lib下並沒有libgsl.lib,libgslcblas.lib這兩個文件,倒是有兩個擴展名為def和a(linux下庫文件包格式)的文件,因此必須進行轉換。
開始菜單,要用VS帶的CMD命令行去跑,不能用windows系統下的CMD!!!
進入gsl庫的lib目錄下依次輸入以下兩條語句:
lib /machine:i386 /def:libgsl.def
lib /machine:i386 /def:libgslcblas.def
再看lib目錄下,發現有了libgsl.lib,libgslcblas.lib這兩個文件。
2、
方式一(不推薦)
將..\GnuWin32l\bin中的libgsl.dll和libgslcblas.dll復制到D:\Program Files\Microsoft Visual Studio 10.0\VC\Bin;將\include整個Gsl目錄復制到D:\Program Files\Microsoft Visual Studio 10.0\VC\include下;\lib目錄下的所有.lib文件全部復制到D:\Program Files\Microsoft Visual Studio 10.0\VC\Lib下。
(如果這樣添加了其實下面指定的前兩個都不需要,因為在系統中已經有了這些文件,但不建議按這種方法指定,這樣會使系統VC庫中的東西非常混亂,強烈建議使用下面這種指定路徑的方法!!)
方式二(推薦)
在Project -> tracking-> Configuration Properties -> C/C++ -> General -> Additional Include Directories 中增加頭文件路徑。
在Project -> tracking -> Configuration Properties -> C/C++ -> General -> Additional Library Directories 中增加庫文件路徑。
在Project -> tracking -> Configuration Properties -> Linker -> Input -> Additional Dependencies 中增加所依賴的庫文件libgsl.lib和libgslcblas.lib。
重要tips:需要在c/c++的command line里添加 /D "GSL_DLL"
(注:Project -> tracking -> Configuration Properties ->C/C++->Command line)
(2) 對於VC6:
生成lib文件:發現安裝目錄lib下並沒有libgsl.lib,libgslcblas.lib這兩個文件,倒是有兩個擴展名為def和a(linux下庫文件包格式)的文件,因此必須進行轉換。
這里可以直接用windows命令行,在命令行中切換到D:\GSL\GnuWin32\lib
lib /machine:i386 /def:libgsl.def
lib /machine:i386 /def:libgslcblas.def
運行以上命令后再看lib目錄下,發現有了libgsl.lib,libgslcblas.lib這兩個文件,這就對了,進入下一步。
將D:\GSL\GnuWin32\bin中的libgsl.dll和libgslcblas.dll復制到..\VC\Bin下;
將D:\GSL\GnuWin32\include目錄下的整個gsl文件夾拷貝到..\VC\include下;
將D:\GSL\GnuWin32\lib目錄下的所有.lib文件全部復制到..\VC98\Lib下。
新建一個VC6工程用於測試,然后進入項目->屬性->連接器->輸入,在“附加依賴項”一欄加入庫文件 libgsl.lib libgslcblas.lib,用空格隔開,並在
Project setting->C++->Project Options加入/D "GSL_DLL",並點擊OK
三、測試用例
1 #include <gsl/gsl_spline.h> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cmath> 5 6 void Display() 7 { 8 const size_t n = 4; 9 double x[] = {0,0.333336,0.666666,1}; 10 double y[] = {0,0.5,0.9,0}; 11 gsl_interp* interps[3] = {NULL,NULL,NULL}; 12 interps[0] = gsl_interp_alloc(gsl_interp_linear,n); 13 interps[1] = gsl_interp_alloc(gsl_interp_polynomial,n); 14 interps[2] = gsl_interp_alloc(gsl_interp_cspline,n); 15 gsl_interp_init(interps[0],x,y,n); 16 gsl_interp_init(interps[1],x,y,n); 17 gsl_interp_init(interps[2],x,y,n); 18 gsl_interp_accel* acc = gsl_interp_accel_alloc(); 19 } 20 21 int main(int argc, char** argv) 22 23 { 24 Display(); 25 return 0; 26 27 }