使用C访问GSL库

时间:2018-03-15 07:22:18

标签: c gsl

我使用 sudo apt install libgsl2 命令安装了gsl库。但是当我使用gcc运行以下程序时,

#include<stdio.h>
#include<math.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_matrix.h>
double x;
double nu;
int main(){
x=4;
nu=2;
double chi;
chi=gsl_cdf_chisq_P (double x, double nu);
printf("%lf",chi);
}

使用gcc -o file filename.c

编译时会显示以下消息
gsl/gsl_rng.h: No such file or directory
compilation terminated.

我在安装过程中是否错过了任何步骤?或者在编译期间是否需要使用任何标志?

1 个答案:

答案 0 :(得分:0)

您需要安装libgsl-dev包。

此软件包包含开发所需的包含文件。

如果有疑问,请检查包中的文件列表

$ dpkg -L libgsl2
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libgsl.so.19.0.0
/usr/lib/x86_64-linux-gnu/libgslcblas.so.0.0.0
/usr/lib/x86_64-linux-gnu/libgslcblas.so.0
/usr/lib/x86_64-linux-gnu/libgsl.so.19
/usr/share/doc
/usr/share/doc/libgsl2
...
just doc files and nothing more

使用dev套餐

$ dpkg -L libgsl-dev
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libgsl.a
/usr/lib/x86_64-linux-gnu/libgslcblas.a
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/gsl.pc
/usr/include
/usr/include/gsl
...
and all the header files here

这就是dev包为您提供了所有必要的标题,静态导入库在静态构建时非常有用。

P.S。不要因为2包名libgsl-devlibgsl2相比缺少2.x而被推迟。两者在您的Ubuntu系统上都是相同的gsl_cdf_chisq_P()版本或其衍生版本。

P.P.S。您的代码还有一些问题。

您正在使用的函数<gsl/gsl_cdf.h>属于CDF函数集合,因此您需要包含gsl_cdf_chisq_P (x, nu)。您需要以gsl_cdf_chisq_P (double x, double nu)而不是#include<stdio.h> #include<math.h> #include <gsl/gsl_rng.h> #include <gsl/gsl_cdf.h> #include <gsl/gsl_vector.h> #include <gsl/gsl_matrix.h> int main(){ double x=0.05; double nu=9; double chicdf, chi; chi=gsl_cdf_chisq_Pinv (1-x, nu); chicdf=gsl_cdf_chisq_P (chi, nu); printf("ICDF[Chisquared<%d>](1 - %lf) = %lf\n" "CDF[Chisquared<%d>](%f) = %lf\n", (int)nu,x,chi,(int)nu,chi,chicdf); return 0; } 正确调用该函数。

生成的代码可能如下所示:

gcc -Wall -O2 testchisq.c -o testchisq -lgsl -lgslcblas -lm 

要编译它运行

ICDF[Chisquared<9>](1 - 0.050000) = 16.918978
CDF[Chisquared<9>](16.918978) = 0.950000

应打印

select CASE WHEN DATEDIFF(minute,@dt1,@dt2) = 0 THEN 'Equal' ELSE 'Not equal' END