【问题标题】:Error using GNU scientific library with Code::Blocks使用带有 Code::Blocks 的 GNU 科学库时出错
【发布时间】:2014-07-09 16:56:01
【问题描述】:

我当前的 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

我花了很多时间试图找出错误的根源,但遗憾的是没有取得太大的成功。我通常不确定为什么会发生崩溃。调试器不打印任何警告或错误消息。

【问题讨论】:

  • 你做了什么调试?它是在运行时崩溃还是编译失败?在我的 linux 系统上,它使用 gcc gsl.c -lm -lgsl -lgslcblas 成功编译并运行良好
  • 您确定您的意思是“编译器”崩溃了吗?
  • 我的错误,我的意思是程序本身在执行时崩溃。我正在使用编译然后立即运行程序的应用程序(代码块)。代码编译成功。当我说调试时,我的意思是我使用了 print 语句来确定执行流程终止的确切点。这是在 'd = gsl_blas_dnrm2 (&column.vector);' 行处
  • 我为你的错误做了一个快速的谷歌搜索,这是很常见的cboard.cprogramming.com/cplusplus-programming/… 这个页面有一些诊断提示。
  • 您使用的是什么操作系统?好像是windows下的一个已知问题...forums.codeblocks.org/index.php/topic,8675.msg63238.html

标签: c matrix codeblocks gsl


【解决方案1】:

我将建议您可能有不匹配的标头和库。可能安装了多个版本的 GSL。您的源代码中引用了一个版本的标头,而链接器正在引用其他版本的库。

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

你会得到这个 0xC0000005 错误,通常是在你使用一些未初始化的指针时。并不是说您的指针在这里未初始化.. 我想说的是&amp;column.vector 的“向量”位被解释为与预期不同的东西。

总之,我认为这是某种环境问题,可能与您的链接器设置有关?这里有一些关于如何配置这些的细节:http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

希望这会有所帮助。

【讨论】:

  • 感谢您的回复。我使用的是 Windows,但我现在使用的是 Linux,并且程序运行良好。一旦有时间,我会确保仔细查看您编写的内容,看看我是否可以解决在使用 Windows 时尝试用 C 编写代码时出现的问题。
猜你喜欢
  • 2015-09-22
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
相关资源
最近更新 更多