Вопрос или проблема
Я пытаюсь запустить 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
Вы можете установить путь к библиотеке и экспортировать его, это грязный способ, но он работает.
- LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data2/Irfan/gsl/lib
- 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)
-
Проверка наличия библиотеки: Прежде всего, убедитесь, что GSL установлена на вашем компьютере. Это можно сделать с помощью следующей команды:
dpkg -l | grep libgsl
Если библиотека установлена, вы увидите соответствующие пакеты.
-
Установка через APT: В большинстве дистрибутивов Linux GSL доступна через менеджер пакетов. Выполните следующую команду для установки:
sudo apt-get install libgsl-dev
Это установит GSL и необходимые заголовочные файлы.
-
Сборка из исходников (если необходимо): Если вам нужна более новая версия (например, GSL 2.1), вы можете скачать исходный код и собрать библиотеку вручную. Загрузите последнюю версию с официального сайта GSL и следуйте инструкциям в документации.
Шаг 2: Компиляция программ на C/C++
-
Компиляция примера: В вашем случае у вас есть два примера кода. Сначала создайте файл
example.c
и вставьте туда код из первого примера. -
Компиляция с помощью GCC: Используйте следующую команду для компиляции программы:
gcc -Wall -o example example.c -lgsl -lgslcblas -lm
-Wall
— включает предупреждения компилятора.-o example
— указывает имя выходного файла.-lgsl -lgslcblas -lm
ссылается на библиотеки, которые необходимо подключить.
Для второго примера создайте файл
matrix_example.c
, а затем выполните аналогичные команды для его компиляции.
Шаг 3: Запуск программы
-
Проблема с библиотеками: Если при запуске программы возникает ошибка:
./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 из исходников.