Ищем недостающую общую библиотеку

В системе Linux я пытаюсь запустить программу Fortran, которая использует некоторые общие библиотеки (netCDF libs, если это имеет значение). Перед запуском я устанавливаю LD_LIBRARY_PATH так, чтобы он указывал на расположение моих библиотек. Затем я запускаю исполняемый файл и быстро получаю сообщение об ошибке

../my_program: ошибка при загрузке общих библиотек: libnetcdff.so.5: невозможно открыть общий объектный файл: нет такого файла или каталога

Теперь я дважды проверяю значение LD_LIBRARY_PATH, а затем cd к нему и нахожу просто как день

$ ls *ff*

$ libnetcdff.a libnetcdff.la libnetcdff.so libnetcdff.so.0 libnetcdff.so.0.0.0

Так что libnetcdff абсолютно присутствует.

Может ли кто-нибудь указать мне на проблему?

Единственное, что пришло мне в голову, это то, что исполняемый файл, кажется, хочет найти libnetcdff.so.5, в то время как присутствующая библиотека на самом деле является libnetcdff.so.0. В этом проблема? Если да, то есть ли способ убедить исполняемый файл не настаивать на 5? В качестве альтернативы, может ли ссылка с libnetcdff.so.0 на libnetcdff.so.5 решить проблему? (У меня нет разрешений в каталоге, кстати, поэтому я еще не пробовал.)

Информация об окружении: машина CentOS, код скомпилирован с помощью gfortran. И да, когда я компилировал, мои флаги -L указывали на тот же каталог, на который указывает LD_LIBRARY_PATH.

Спасибо.


person bob.sacamento    schedule 02.10.2013    source источник
comment
Создайте символическую ссылку на libnetcdff.so.5 из libnetcdff.so.0. Он должен работать...   -  person iamauser    schedule 02.10.2013
comment
Удалил свой комментарий, потому что увидел свою ошибку. Ваша идея работает.   -  person bob.sacamento    schedule 02.10.2013


Ответы (1)


Ссылка на библиотеку должна работать. Поскольку вы упомянули, что у вас нет доступа root/sudo, вы можете сделать ссылку на файл, к которому у вас есть доступ:

ln -s /path/to/libnetcdff.so.0 /path/you/have/access/to/libnetcdff.so.5

А затем добавьте /path/you/have/access/to/ в свой LD_LIBRARY_PATH.

person Kyle Kanos    schedule 02.10.2013
comment
Пробовал это. Пошло не так, как планировалось. Пожалуйста, смотрите мой ответ iamauser выше. Приветствуются любые идеи относительно того, что пошло не так. - person bob.sacamento; 02.10.2013
comment
Оцените свое редактирование. Единственное, две звездочки в строке ls на самом деле являются двумя звездочками, а не тегом форматирования, и их следует оставить на месте. Я не знаю, как сделать повторную обработку. - person bob.sacamento; 02.10.2013
comment
Не обращайте внимания на мой первый комментарий. Я увидел свою ошибку. Ваша идея сработала. Спасибо. - person bob.sacamento; 02.10.2013
comment
Любопытно, я на самом деле не помню, чтобы удалял эти звездочки (я знаю, что они важны), но журнал редактирования показывает, что я их удалял. Рад, что смог помочь! - person Kyle Kanos; 02.10.2013