GNU/LINUX科学计算库GSL安装及测试

GSL简介

GSL(GNU Scientific Library)是一个应用广泛的C/C++科学计算库,其包含了大量高效的数学函数。本文将简单介绍Linux操作系统下GSL库的安装和测试。

 

GSL安装

  • 从GSL官方给出的下载点(http://mirrors.ustc.edu.cn/gnu/gsl/),选择适当的版本下载(其中,gsl-latest.tar.gz是最新版本,推荐)。使用命令
    $ tar –zxv –f your_file_name
    解压,解压完毕后进入解压出的文件夹gsl-version_number。安装过程是标准的三步走,如下。
  • 首先使用命令配置编译信息:
    $ [sudo] ./configure [--prefix=your_path]
    其中[ ]内为可选命令。root用户可用sudo指令(Ubuntu操作系统下),非root用户请忽略;而your_path可用来指定安装位置,默认的安装位置通常是/usr/local(需要root权限)。非root用户无法安装到/usr/local,必须自己指定--prefix。
  • 相继使用命令编译和安装GSL库
    $ [sudo] make
    $ [sudo] make install

    来编译安装GSL库。安装完成后,在指定的安装位置your_path内将会出现bin、lib、include三个文件夹,分别用来存放GSL的命令行指令、函数库和头文件。

GSL相关环境变量的设置

  • 按上面步骤安装完成后,就可以使用GSL库了。但是,为了使得编译器能够找到GSL头文件和库文件位置,在编译自己的程序时需要用指令-I指定头文件包含路径,用指令-L指定GSL库文件位置,并用-l连接上GSL的库函数(gsl函数库和gslcblas线性代数库)。也就是说,编译的命令应该像下面这样(编译器可以是gcc/g++):
    $ gcc –Lyour_path/lib –Iyour_path/include  your_code –lgsl –lgslcblas
    其中your_path就是上面提到的GSL安装路径,your_code是你自己的代码(可以使用下面的例子)。需要注意的是-lgsl -lgslcblas要放在编译指令的最后,否则有些编译器可能会报错。另外,某些老版本的编译器可能还要在最后加上-lm来连接基本数学库。有些时候,如果你使用了c99特性,还需要在编译时添加-std=c99指令。这样,可以得到一个可执行文件a.out。
  • 有的时候,你可能觉得每次编译时都使用-I和-L有点麻烦,这时候可以设置环境变量。在自己的配置文件里(例如,利用指令$ vi ~/.bashrc打开自己的配置文件),在最后面加上:
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:your_path/include
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:your_path/include
    export LIBRARY_PATH=$LIBRARY_PATH:your_path/lib

    然后重启命令行(或者利用指令$ source ~/.bashrc读取配置文件)。这样,再编译的时候就不需要指定编译器/连接器搜索路径了(其中,CPLUS_INCLUDE_PATH是C++的头文件找寻路径,如果你只使用C语言,可以不必配置该环境变量)。然后,编译指令就可以简单写为
    $ gcc your_code –lgsl –lgslcblas
  • 最后,执行可执行文件./a.out前,需要将GSL的函数库路径加入到LD连接器的连接路径,以保证动态链接的库能够被查找到:
    $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your_path/lib
    为了方便,也可以把这行指令写到配置文件里去。
  • 这样,我们就完成了GSL的安装和环境变量的设置工作,现在可以尽情享受科学计算的乐趣了!

 

一个简单的例子

下面给出一个简单的示例代码,如下:

复制代码

/*example.c*/
#include <stdio.h>            
#include <gsl/gsl_sf.h>        // header: GSL special functions

int main(int argc, char const *argv[])
{
  // inputs for special functions
    double x[5] = {1.,2.,3.,4.,5.};
  // calculate zero-order Bessel function at given points
    for (int i = 0; i < 5; ++i){
        printf("J0(%.3f) = %.3f\n", x[i], gsl_sf_bessel_J0(x[i]));
    }
    return 0;
}

复制代码

上面的代码计算了0阶贝塞尔函数在五个点处的函数值。输出如下:

J0(1.000) = 0.765
J0(2.000) = 0.224
J0(3.000) = -0.260
J0(4.000) = -0.397
J0(5.000) = -0.178

更多的用法,推荐参考GSL的用户手册(https://www.gnu.org/software/gsl/doc/latex/gsl-ref.pdf),里面详细介绍了各种库函数的用法,并有相应的例子。

猜你喜欢

转载自blog.csdn.net/mzhifa/article/details/82113165