Gcc: связанные библиотеки в /usr/local/lib не найдены, но /etc/ld/so.conf.d/libc.conf перечисляет его?
У меня проблема с общими библиотеками и gcc. Сначала я не мог запустить свою скомпилированную программу, потому что получал следующую ошибку: ошибка gcc при загрузке разделяемых библиотек.
Я сделал несколько поисков и обнаружил, что это связано с тем, что общая библиотека не найдена. Однако я уже определил, что общая библиотека находится в каталоге /usr/local/lib, который AFAICT является обычно используемым каталогом для разделяемых библиотек и должен работать с самого начала.
Я читал, что вы можете установить LD_LIBRARY_PATH, который работал у меня. Однако я не хочу устанавливать это каждый раз, когда хочу запустить свою программу.
Дальнейший поиск предлагает отредактировать ld.so.conf. Когда я посмотрел в это, у него было следующее:
include /etc/ld.so.conf.d/*.conf
В каталоге ld.so.conf.d отображается список файлов, включая libc.conf. Внутри этого файла указано следующее:
/usr/local/lib
Итак, мой вопрос: зачем мне вручную устанавливать LD_LIBRARY_PATH, когда ld.so.conf, как представляется, использует libc.conf, который включает /usr/local/lib?
Есть ли что-то, что мне не хватает здесь, которое нужно настроить первым? Есть ли вариант во время компиляции, который мне не хватает?
Я должен отметить, что для компиляции мне нужно было указать путь к библиотеке, я не знаю, является ли это симптомом моей проблемы или нормального поведения.
Я также должен отметить, что это беспокоит меня, когда я развертываю свое программное обеспечение в других системах. Я бы подумал, что я должен уметь разместить .so в соответствующем месте и установить свою программу, не входя в ld.so.conf.
Я надеюсь, что это подходящий форум для этого вопроса, я прочитал FAQ и думаю, что все в порядке.
Приветствия.
Ответы
Ответ 1
Вы должны запустить ldconfig
(как пользователь root) после каждого изменения каталогов, настроенных через /etc/ld.so.conf
или под /etc/ld.so.conf.d/
, в частности в вашем случае после каждого обновления внутри /usr/local/lib
(например, после каждого добавления или обновления некоторые общие библиотеки там).