C++ C:运行GSL函数

C++ C:运行GSL函数,c++,c,gsl,C++,C,Gsl,尽管程序编译成功,但计算机拒绝运行包含GSL函数的程序。例如,考虑下面的程序作为GSL网站上的一个例子: // Test program for GSL RNG #include <stdio.h> #include <gsl/gsl_rng.h> int main (void) { const gsl_rng_type * T; gsl_rng * r; int i, n = 10; gsl_rng_env_setup(); T = gsl

尽管程序编译成功,但计算机拒绝运行包含GSL函数的程序。例如,考虑下面的程序作为GSL网站上的一个例子:

// Test program for GSL RNG

#include <stdio.h>
#include <gsl/gsl_rng.h>

int main (void)
{
  const gsl_rng_type * T;
  gsl_rng * r;

  int i, n = 10;

  gsl_rng_env_setup();

  T = gsl_rng_default;
  r = gsl_rng_alloc (T);

  for (i = 0; i < n; i++) 
    {
      double u = gsl_rng_uniform (r);
      printf ("%.5f\n", u);
    }

  gsl_rng_free (r);

  return 0;
}

对不起,是用法语写的,但我想你会明白要点的。GSL已安装,我已亲自检查是否存在头文件。有人能帮忙吗?

您似乎没有正确链接GSL库。例如,如果您的GSL库的相对路径是LIB_GSL,并且如果您希望静态链接GSL库,那么您需要包含一行如下所示(针对GSL 1.16测试)

如果您也使用BLAS功能,并且自己不链接任何其他BLAS库,那么您还应该链接GSL中包含的BLAS库,如果您静态链接(针对GSL 1.16测试),该库看起来会像这样:


看来你的程序链接不正确。如果GSL库安装在默认位置/usr/local/lib,则可能缺少支持库(CBLAs库)。GSL还为它提供了一个名为libgslcblas.a的库(如果您的系统没有)

尝试将您的程序链接到:

$ gcc -L<location_of_lib> yourProgram.o -lgsl -lgslcblas -lm
$gcc-L yourProgram.o-lgsl-lgslcblas-lm

-使用-L选项,提供库的位置,如果它安装在默认位置,则不需要它。

C!=C++,title在C代码时指定C。cc< /Cord>文件扩展名似乎表示C++。一般来说,您应该只标记您正在编写/编译的语言,除非您提出了关于差异或相似性的问题。
LIB_GSL/.libs/libgsl.a
LIB_GSL/cblas/.libs/libgslcblas.a
$ gcc -L<location_of_lib> yourProgram.o -lgsl -lgslcblas -lm