最強數學庫GSL(GNU Scientific Library) Qt環境下部署
1.前言
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的在Windows平臺下的配置有好多文章,像常用的vc6到vs2010,都有許多參考文章,這裡就不一一羅列,大家谷歌或百度一下都可以找到,但是唯獨沒有Qt環境下的配置(至少我沒看到),雖然Qt和vs下配置大同小異,但是為了方便各位,還是覺得有必要寫一篇進行說明。
2.獲取GSL
下載地址: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”目錄下的標頭檔案
3.生成lib檔案
由於官方沒有提供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這兩個檔案。
4.Qt環境下配置gsl
有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
這時就完全OK了。
可以試試下面的程式碼:
H:
-
#include <gsl/gsl_sf_bessel.h>
-
#include <math>
-
#include<iostream>
CPP:
-
int main()
-
{
-
double x =5.0;
-
double y =gsl_sf_bessel_J0 (x);
-
cout<< "J0("<< x <<") = " << y<< endl;
-
return0;
-
}
第一次執行,會直接崩潰,主要是dll沒放到生成目錄裡,把dll放到對應的目錄裡,即可正常執行。
5. 編寫GSL的PRI檔案,簡化部署步驟
得益於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
6.視訊教程
下面是配置的視訊教程:
http://v.youku.com/v_show/id_XNzc5MjU1NzEy.html
通過此方法可以方便的配置很多庫,順帶附送一個Qt下配置blitz++數學庫的方法:
http://v.youku.com/v_show/id_XNjk4NDA3NDQw.html
7.demo下載
下載demo(包括gsl必要的dll和lib檔案):http://download.csdn.net/detail/czyt1988/7893997