Как я могу запустить программу на C/C++, которая использует Библиотеку научных вычислений GNU (GSL)?

Вопрос или проблема

Я пытаюсь запустить 2 простых примера на c/c++ с использованием GNU Scientific Library.

Вот коды:

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++)  /* ОШИБКА В ПРЕВЫШЕНИИ ДИСПЕТА */
    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 Scientific Library (GSL) – Пакет библиотеки (libgsl0ldbl 1.16+dfsg-1ubuntu1), но документация, которую я прочитал, говорила, что мне нужно компилировать с помощью следующего кода:

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

И директория /usr/local/include была пустой, поэтому недавно я также установил вручную с сайта Основной сайт GSL – GNU Scientific Library новую версию 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

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

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

Примечание*: /data2/Irfan/gsl/lib – это путь к тому месту, где вы установили gsl.

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

Помимо решения Ифрана, которое является совершенно валидным решением. Другой вариант – это связать статическую библиотеку в момент связывания.

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

Ответ или решение

Чтобы запустить программу на C/C++ с использованием GNU Scientific Library (GSL), вам нужно выполнить несколько шагов, начиная с установки библиотеки и заканчивая компиляцией и запуском программы. В этом ответе я опишу подробный процесс, основываясь на предоставленной информации и частых проблемах, с которыми могут столкнуться разработчики.

Шаг 1: Установка GNU Scientific Library (GSL)

  1. Проверка наличия библиотеки: Прежде всего, убедитесь, что GSL установлена на вашем компьютере. Это можно сделать с помощью следующей команды:

    dpkg -l | grep libgsl

    Если библиотека установлена, вы увидите соответствующие пакеты.

  2. Установка через APT: В большинстве дистрибутивов Linux GSL доступна через менеджер пакетов. Выполните следующую команду для установки:

    sudo apt-get install libgsl-dev

    Это установит GSL и необходимые заголовочные файлы.

  3. Сборка из исходников (если необходимо): Если вам нужна более новая версия (например, GSL 2.1), вы можете скачать исходный код и собрать библиотеку вручную. Загрузите последнюю версию с официального сайта GSL и следуйте инструкциям в документации.

Шаг 2: Компиляция программ на C/C++

  1. Компиляция примера: В вашем случае у вас есть два примера кода. Сначала создайте файл example.c и вставьте туда код из первого примера.

  2. Компиляция с помощью GCC: Используйте следующую команду для компиляции программы:

    gcc -Wall -o example example.c -lgsl -lgslcblas -lm
    • -Wall — включает предупреждения компилятора.
    • -o example — указывает имя выходного файла.
    • -lgsl -lgslcblas -lm ссылается на библиотеки, которые необходимо подключить.

    Для второго примера создайте файл matrix_example.c, а затем выполните аналогичные команды для его компиляции.

Шаг 3: Запуск программы

  1. Проблема с библиотеками: Если при запуске программы возникает ошибка:

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

    Это указывает на то, что библиотека не может быть найдена. Для решения этой проблемы воспользуйтесь одним из предложенных решений:

    • Настройка переменной среды:

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

      Это добавит путь к библиотекам GSL в переменную среды, позволяя загрузчику находить их. Убедитесь, что путь указывает на папку, где находятся ваши библиотеки libgsl.so и libgslcblas.so.

    • Использование статической компиляции (если скаченный файл статический):

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

Заключение

Теперь вы должны успешно запустить вашу программу с использованием GNU Scientific Library. Если возникнут дополнительные вопросы, я рекомендую обратиться к официальной документации GSL или использовать форумы сообщества, такие как Stack Overflow. Всё это обеспечит вам необходимую поддержку и дополнительные советы. Не забывайте обновлять и очищать ваши пути для библиотек, особенно если вы собираете GSL из исходников.

Оцените материал
Добавить комментарий

Капча загружается...