如何运行使用 GNU 科学库 (GSL) 的 c/c++ 程序?

如何运行使用 GNU 科学库 (GSL) 的 c/c++ 程序?

我正在尝试运行两个简单的例子代码/c++使用GNU 科学库

这些是代码:

第一:示例程序

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

int main (void)
{
  double x = 5.0;
  double y = gsl_sf_bessel_J0 (x);
  printf ("J0(%g) = %.18e\n", x, y);
  return 0;
}

第二: 矩阵示例程序

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

int main (void)
{
  int i, j; 
  gsl_matrix * m = gsl_matrix_alloc (10, 3);

  for (i = 0; i < 10; i++)
    for (j = 0; j < 3; j++)
      gsl_matrix_set (m, i, j, 0.23 + 100*i + j);

  for (i = 0; i < 100; i++)  /* OUT OF RANGE ERROR */
    for (j = 0; j < 3; j++)
      printf ("m(%d,%d) = %g\n", i, j, 
              gsl_matrix_get (m, i, j));

  gsl_matrix_free (m);

  return 0;
}

我在软件中心我有GNU 科学库 (GSL) - 库包 (libgsl0ldbl 1.16+dfsg-1ubuntu1)但是我读过的文档说我需要使用下一个代码进行编译:

$ gcc -Wall -I/usr/local/include -c example.c

目录/usr/local/include是空的,所以最近我也从网站手动安装了主 GSL - GNU 科学图书馆站点新版本GSL2.1。接下来我运行之前提到的代码,这样我就有了一个新的文件 example.o,然后我运行下一个代码:

$ gcc -L/usr/local/lib example.o -lgsl -lgslcblas -lm

所以我有一个a.out文件,我试图运行$ ./a.out但输出是:

`./a.out: error while loading shared libraries: libgsl.so.19: cannot open shared object file: No such file or directory`

我也尝试过这个命令:

$ ldconfig -p | grep gsl
    libgslcblas.so.0 (libc6,x86-64) => /usr/lib/libgslcblas.so.0
    libgsl.so.0 (libc6,x86-64) => /usr/lib/libgsl.so.0

所以我可以看到执行的a.out是要求libgsl.so.19,但ldconfig说,PC上的库是libgsl.so.19

答案1

您可以设置库的路径并导出它,这是一种肮脏的方法,但它有效

  1. LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data2/Irfan/gsl/lib
  2. 导出 LD_LIBRARY_PATH

注意* /data2/Irfan/gsl/lib 是您安装 gsl 的路径

答案2

我想你的问题现在可能已经解决了。这个答案将为任何可能遇到类似问题的人提供简单的参考。

除了 Irfan 解决方案(这是一个非常有效的解决方案)之外,另一个选择是在链接时链接静态库。

gcc -L/usr/local/lib example.o -l:libgsl.a -lgslcblas -lm

相关内容