您需要安装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 包为您提供了所有必要的标头和静态导入库,在静态构建的情况下很有用。
附:与libgsl2 相比,libgsl-dev 包的名称中缺少2。在您的 Ubuntu 系统或其派生系统上,两者都将具有相同的 2.x 版本。
附言您的代码还有一些问题。
您使用的函数gsl_cdf_chisq_P() 属于CDF 函数集合,因此您需要包含<gsl/gsl_cdf.h>。并且您需要以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