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 (например, после каждого добавления или обновления некоторые общие библиотеки там).