GNU Scientific Library

                     

贡献者: addis

  • 本文处于草稿阶段。
  • 本文缺少预备知识,初学者可能会遇到困难。

   GNU Scientific Library (GSL) 是一个 GNU 开源项目,由 C 语言写成。

1. Linux 安装使用

   在 Debian/Ubuntu 系统上可执行 sudo apt install libgsl-dev 安装。

   第二种方法是自己下载源码编译。

   参考资料。gsl 通常的使用方法是先安装,生成 include 文件夹 (含有所有头文件) 和 lib 文件夹 (.so 文件以及 .a 文件). 先下载最新版安装包, 目前是 gsl-2.5.tar.gz, 解压命令 tar -xvzf gsl-2.5.tar.gz, 得到 gsl-2.5 文件夹, cd gsl-2.5, 然后 ./configure --prefix=安装目录 其中安装目录只能是绝对目录. 然后 make, 安装好以后 make check 检查, 然后 make install 即可. 只有最后一步会在安装目录中生成文件.

// example.c
#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>

int main (void) {
    double x = 15.0;
    double y = gsl_sf_bessel_J0 (x);
    printf ("J0(%g) = %.18e\n", x, y);
    return 0;
}

   要编译, 用 gcc -Wall -I 安装目录/include/ -c example.c

   要 link, 用

gcc test.o -Wl,-rpath,安装目录/lib -L 安装目录/lib -lgsl -lgslcblas -lm
其中 gsl 包含所有 gsl 的函数, gslcblas 提供了一个 cblas, 但也可以用其他更优化的如 ATLAS 提供的, m 是编译器的 math library.

   以下试图使用 apt 直接安装 gsl

源码再利用

   gsl 完全是 c 语言写的, 所以 cuda 应该也是以用的, 但是不能用编译好的 a 和 so, 而是要重新由源码编译. 即使不用 cuda, 直接使用源码也可以让代码更 portable.

   用 understand 分析了一下 bessel3j symbol 两个函数, 发现如果不修改代码, 要找到编译某个函数需要的所有文件真的很难, 至少有几十个文件. 其中有一个比较特殊的文件是 config.h, 应该是要运行安装包的 config 以后才会生成的.

   我觉得可以把所有的头文件和 c 文件都放在一个文件夹里面, 然后做一个类似 SCID_TDSE 的 makefile, 自动分析出 dependency. 不过 c 和 fortran 不同,要做到自动还是很有难度的. 不知道 understand 有没有这个功能. 如果不行, 干脆就所有 c 文件都编译? 又或许安装包里的 makefile 已经有 dependency list 了.

   然后又发现 gsl 安装的就是所谓的 two-step process: configure followed by make.

   用 git 对比了一下安装过程的源码, 发现安装过程并不会改变任何源码(.c 和 .h 文件), 只会根据系统生成 "config.h", 其实也可以直接手动修改该文件, 主要是一些宏的定义和取消, 注释非常易懂. 所以理论上, 只要把所有源码文件都放到一起编译就可以了.

2. Visual Studio 编译 GSL

   以下介绍如何使用用 CMake 和 Visual Studio 2017 编译 lib 和 dll 以及测试文件(貌似测试的时候有一项会 fail)

3. 使用部分源码

4. 异常处理

   如果要临时关闭一些 trivial 的异常(比如 exp(-x) 对于大 x 会 underflow 异常),用 gsl_set_error_handler_off() 要恢复默认的异常处理,用 gsl_set_error_handler(NULL) 详见这里


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利