GSL - GNU Scientific Library 在 windows 上的使用

GNU Scientific Library 在 windows 上的使用

有些逗逼話語,請注意 -.-

緣由

事情大抵是這樣的:畢設要參考一片文章 -> 找到原作者的鏈接 -> 發現他直接給出了源代碼 ^^ -> 是 matlab 的 -.- -> 在 github 上找更合適的實現(C++) -> 發現了一個看來很靠譜的 -> 運行了五點法,成功! ^^_^^ -> 四點法需要 GSL 庫的支持 -> GSL 官網說了他們不太喜歡 windows(”A compiled version of GSL is available as part of Cygwin on Windows (but we recommend using GSL on a free operating system, such as GNU/Linux).”) -> 事實證明在 windows 上使用確實不太簡單:1 WinGsl,2 Gsl for Windows 版本太舊,3 不少編譯版本(此處僅給出一個,網上很多) 並不好用。比較靠譜的Installing GSL on Windows 中的 The hard way: compile your own version 就像他自己說的那樣 “only works with version 1.8 of GSL”, 而我相當於剛入門 cmake,並不能自己修改太多。

最後的最後,在嘗試了 N 次,準備放棄之時(其實,真不好說,畢竟強迫症又上來了)。終於在 github 上找到了很好的一個 GNU Scientific Library with CMake build support,感謝蒼天大地!!!

步驟

我的環境是 windows10 + vs2013 社區版 + Cmake 3.5.2

此 repository 是對 GSL 進行 CMake 的包裝,並且更新到 GSL 的 2.1 版本。
剩下的就是很直觀了

git clone 下來

mkdir build & cd build
cmake .. -G "NMake Makefiles"
nmake
nmake install

說一下我遇到的問題:
1.nmake 時會不通過,是的,真的是 error。但當時抱着 WTF 的想法,又執行了一次 nmake,發現可以繼續執行,這樣的動作進行了幾次,最終 make 完成。
2.nmake install 時需要管理員權限(它是默認安裝到了 C:\Program Files (x86)\GSL 路徑下,但是寫程序時路徑中的空格有可能會有些不好,所以我把整個文件又拷貝到了其他的目錄)

再說一下你需要注意的地方和可能遇到的問題:
1.首先需要安裝 Cmake,zip 版本是足夠使用的。直接解壓到一個路徑,並添加 “系統變量” Cmake( “解壓目錄”\cmake\bin),然後將 %Cmake% 添加到 Path 下。
2.因爲是直接使用 nmake,cl,lib 等命令,所以還是需要將包含這些命令的路徑添加到 Path 下的。如若不然的話,肯定是不可用的,根據錯誤提示(大概是需要運行一下 vcvarsall.bat,將所需命令都在當前 cmd 中可用),添加 VS120_NMAKE 的環境變量,設爲 “\Microsoft Visual Studio 12.0\VC”,並將 %VS120_NMAKE% 添加到 Path 下。
3.新開啓一個 cmd 時,可以先執行 cmake 命令,驗證可以使用 cmake。然後執行 vcvarsall,會有一小段時間的停頓,然後執行 namke 命令,驗證 vcvarsall 正確執行。之後,應該都可以了。

小例子

上面說到 nmake install 默認安裝到了 C:\Program Files (x86)\GSL 文件夾下,其目錄結構爲:

├───include
│ └───gsl
└───lib

編寫程序時,需要將 include 和 lib 文件夾包含進去。

示例一:
1.vs 新建一個工程
2.添加 hello.cpp

#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) = %.18e\n", x, y);
        return 0;
}

3.PROJECT -> Properties -> Configuration Properties -> VC++ Directories ->

Include Directories 下添加我們生成的 include 文件夾
Library Directories 下添加 lib 文件夾

Configuration Properties -> Linker -> Input -> Additional Dependencies 下添加 gsl.lib;gslcblas.lib;
4.運行,得出結果 J0(5) = -1.775967713143382600e-001

示例二(確實是挺喜歡 Cmake 的):
1.在任一文件夾下添加 hello.cpp 如上
2.新建 CMakelists.txt:

PROJECT (HELLO)
cmake_minimum_required(VERSION 3.5)

SET (SRC_LIST hello.cpp)

ADD_EXECUTABLE (hello ${SRC_LIST} )

include_directories("放置目錄"\\GSL\\include)
target_link_libraries (hello "放置目錄"\\GSL\\lib\\gsl.lib "放置目錄"\\GSL\\lib\\gslcblas.lib)

3.mkdir build & cd build
4.cmake .. -G “NMake Makefiles”
5.nmake
6.hello.exe

小結

1.我們生成的 lib 文件在 RELEASE 和 DEBUG 模式下均可使用
2.看到網上不少說要生成 DLL 文件,目前沒有發現必要性(大概我遺漏了什麼?)
3.軟件的不兼容性是個歷史悠久的爛泥潭
4.Cmake 是很不錯的
5.GSL 的使用範圍應當是很廣泛的,自己花了整整兩天的功夫纔在 windows 上裝好了,應該好好利用。(多少次花了很長時間配環境,配完就撂那不管 -.-)

Good luck & have fun

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