我使用 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.
我在安装过程中是否错过了任何步骤?或者在编译期间是否需要使用任何标志?
答案 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-dev
与libgsl2
相比缺少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