使用带有Code :: Blocks的GNU科学库时出错

时间:2014-07-09 16:56:01

标签: c matrix codeblocks gsl

我目前的Code :: Blocks(GNU GCC编译器)设置存在异常问题。编译器似乎选择性地运行一些GSL函数,但在命令执行其他GSL函数时似乎出于某种原因会遇到很大问题。

例如,我从以下目的地解除了以下代码: https://www.gnu.org/software/gsl/manual/html_node/Example-programs-for-matrices.html

我认为因为代码是从官方GNU网站派生的,所以代码是正确的:

#include <math.h>
#include <stdio.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>

int
main (void)
{
  size_t i,j;

  gsl_matrix *m = gsl_matrix_alloc (10, 10);

  for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
      gsl_matrix_set (m, i, j, sin (i) + cos (j));

  for (j = 0; j < 10; j++)
    {
      gsl_vector_view column = gsl_matrix_column (m, j);
      double d;

      d = gsl_blas_dnrm2 (&column.vector);

      printf ("matrix column %d, norm = %g\n", j, d);
    }

  gsl_matrix_free (m);

  return 0;
}

从调试开始,我了解到错误的来源是以下几行:

d = gsl_blas_dnrm2 (&column.vector);

此时编译器崩溃并输出以下错误消息:

流程返回-1073741819&lt; 0xC0000005&gt;

我花了很多时间试图发现bug的来源,但遗憾的是没有取得多大成功。我一般不确定为什么会发生崩溃。调试器不打印警告或错误消息。

1 个答案:

答案 0 :(得分:0)

我要建议你可能有不匹配的标题和库。也许安装了多个版本的GSL。您拥有源中引用的一个版本的头文件,链接器引用其他版本的库。

我查找了gsl_vector_view的typedef并最终到了这里,你甚至可以看出这个版本甚至不支持该结构的向量成员类型。

通常在使用某些单位指针时,您将收到此0xC0000005错误。这并不是说你的指针在这里没有被初始化。我会说正在发生的事情是&column.vector的'vector'位被解释为不同于预期的东西。

总之,我认为这可能是某种环境问题,也许是您的链接器设置?有关如何在此配置这些内容的详细信息:http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

希望这有帮助。