C:运行GSL功能

时间:2016-03-07 13:56:30

标签: 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_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;
}

这会编译,但在执行期间会出现以下错误:

/tmp/ccPWUHlO.o: dans la fonction « main »:
GSL_rng_test.cc:(.text+0x10): référence indéfinie vers « gsl_rng_env_setup »
GSL_rng_test.cc:(.text+0x17): référence indéfinie vers « gsl_rng_default »
GSL_rng_test.cc:(.text+0x27): référence indéfinie vers « gsl_rng_alloc »
GSL_rng_test.cc:(.text+0x46): référence indéfinie vers « gsl_rng_uniform »
GSL_rng_test.cc:(.text+0x7d): référence indéfinie vers « gsl_rng_free »
collect2: erreur: ld a retourné 1 code d'état d'exécution

抱歉,这是法语,但我想你会理解这个要点。安装了GSL,我自己检查了头文件是否存在。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

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

LIB_GSL/.libs/libgsl.a

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

LIB_GSL/cblas/.libs/libgslcblas.a

答案 1 :(得分:0)

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

尝试将您的计划与:

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

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