天天看点

GNU科学函数库[参考手册][v0.1 Build 090201 Beta][GNU Scientific Library]

--------------------------仅供学习使用 未经允许 严禁转载!-----------------------------

第二章:使用函数库

2 函数库的使用

本章介绍如何使用 GSL 编译程序,并介绍它的约定惯例(习惯用法)。

2.1 一个简单的程序

下面的小程序展示了使用函数库计算当 x=5 时 bessel 函数 J0(x) 的值,

#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;

}

输出如下所示,它的精度为双精度,

J0(5) = -1.775967713143382920e-01

编译此程序需要的步骤在以下各节中描述。

2.2编译与链接

函数库头文件安装在它们自己的"GSL"文件夹中。你需要写的任何预处理include声明应包括用"gsl/"的目录前缀。

#include <gsl/gsl_math.h>

如果目录没有按照编译器的标准搜索路径进行安装,你还需要提供预处理命令它的位置作为命令行标志。"gsl"目录的默认位置为"/usr/local/include/gsl"。使用GNU C 编译器 gcc的关于源文件"example.c"的一个典型的编译命令为,

$ gcc -Wall -I/usr/local/include -c example.c

结果在目标文件"example.o"中。gcc自动默认搜索的include路径为"/usr/local/include",所以选项-I实际上被忽略当GSL被安装在它的默认位置。

---------------------------------------------------------------------------------------------------------------

                                                                   省略一些

---------------------------------------------------------------------------------------------------------------

2.3共享函数库

运行程序链接共享版本的函数库,操作系统必须能够在运行时间内查找相应的".so"文件。如果不能找到函数库,下面的错误将发生:

$ ./a.out

./a.out: error while loading shared libraries:

libgsl.so.0: cannot open shared object file: No such

file or directory

为避免这个错误,定义shell变量LD_LIBRARY_PATH去包括函数库所安装的目录。

     例如,在Bournd shell(/bin/sh或/bin/bash),函数库搜索路径可用以下命令设置:

$ LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

$ export LD_LIBRARY_PATH

$ ./example

在 C-shell(/bin/csh或/bin/tcsh)中相似的命令为,

% setenv LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH

在以上例子中标准的C-shell提示符为百分号"%",并且不是命令的一部分故不用打出。

     为了节省每次输入这些命令,它们应放在单独的或全系统登陆文件夹中。

     为编译一个静态链接版本的程序,在gcc中使用-static选项,

$ gcc -static example.o -lgsl -lgslcblas –lm