GSL - GNU Scientific Library 在 windows 上的使用

来源:互联网 发布:php微信开发视频 编辑:程序博客网 时间:2024/05/02 01:33

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 buildcmake .. -G "NMake Makefiles"nmakenmake 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

0 0