我正在尝试运行两个简单的例子代码/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
您可以设置库的路径并导出它,这是一种肮脏的方法,但它有效
- LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data2/Irfan/gsl/lib
- 导出 LD_LIBRARY_PATH
注意* /data2/Irfan/gsl/lib 是您安装 gsl 的路径
答案2
我想你的问题现在可能已经解决了。这个答案将为任何可能遇到类似问题的人提供简单的参考。
除了 Irfan 解决方案(这是一个非常有效的解决方案)之外,另一个选择是在链接时链接静态库。
gcc -L/usr/local/lib example.o -l:libgsl.a -lgslcblas -lm