Как запустить программу на языке c / c ++, использующую научную библиотеку GNU (GSL)?

Я пытаюсь запустить 2 простых примера в c / c ++ , используя научную библиотеку GNU .

Это коды:

1-й: Пример программы

#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;
}

2-й: Пример программ для матриц

#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 был пуст, поэтому недавно я также установил вручную с сайта Main 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 сказал, что Библиотека на ПК - это libgsl.so.19

2
задан 2 May 2016 в 00:03

2 ответа

можно установить путь библиотеки и экспорта его, это - грязный путь, но это работает

  1. $LD_LIBRARY_PATH:/data2/Irfan/gsl/lib LD_LIBRARY_PATH=
  2. примечание LD_LIBRARY_PATH

, экспорта*/data2/Irfan/gsl/lib является путем того, где Вы установили gsl

0
ответ дан 17 April 2019 в 04:28

Я предполагаю, что Ваша проблема, возможно, была решена теперь. Этот ответ предоставит легкую ссылку любому, кто, возможно, столкнулся с подобной проблемой.

Кроме решения Irfan, которое является совершенно допустимым решением. Другая опция состоит в том, чтобы связать статическую библиотеку во время соединения.

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

0
ответ дан 17 April 2019 в 04:28

Другие вопросы по тегам:

Похожие вопросы: