Ошибка ldconfig: не является символической ссылкой
При запуске:
sudo /sbin/ldconfig
появляется следующая ошибка:
/sbin/ldconfig: /usr/local/lib/ is not a symbolic link
Когда я запускаю файл:
file /usr/local/lib/
/usr/local/lib/: directory
Внутри /usr/local/lib/
есть три библиотеки, которые я использую. Я буду называть их здесь lib1
, lib2
и lib3
.
Теперь, когда я делаю ldd
в моем двоичном файле, это дает результат:
lib1.so => not found
lib2.so => not found
lib3.so => /usr/local/lib/lib3.so (0x00216000)
Но все они находятся в той же папке, что и /usr/local/lib/{lib1,lib2,lib3}.so
.
Каждый раз, когда я запускаю ldconfig
, появляется такая же ошибка:
/usr/local/lib/ is not a symbolic link
Я думал, что /usr/local/lib
должен быть объявлен дважды в /etc/ld.conf.d/*.conf
, но не:
sudo egrep '\/usr\/local' /etc/ld.so.conf.d/*
projectA.conf.old:/usr/local/projectA/lib
local.conf:/usr/local/lib
ld.so.conf
включает только /etc/ld.so.conf.d/*.conf
, поэтому этот *.old
не обрабатывается и относится к /usr/local/projectA/lib
.
После тайм-трека я удалил все lib1 и lib2 (в какой-то момент я протестировал его в двоичной папке), возникает такая же ошибка.
Ответы
Ответ 1
Я столкнулся с этой проблемой с клиентом Oracle 11R2. Не уверен, что установщик Oracle сделал это, или кто-то сделал это здесь, прежде чем я приехал. Это было не 64-битное, а 32-битное, все было 64-битным.
Ошибка заключалась в том, что libexpat.so.1
не является символической ссылкой.
Оказалось, что существует два одинаковых файла, libexpat.so.1.5.2
и libexpat.so.1
. Удаление повреждающего файла и превращение его в символическую ссылку на версию 1.5.2 привело к тому, что ошибка исчезла.
Имеет смысл, что вы хотите, чтобы известное имя было символической ссылкой на текущую версию. Если вы это сделаете, это будет менее вероятно, что вы закончите с устаревшей библиотекой.
Ответ 2
Решено, по крайней мере, в точке вопроса.
Я искал в сети, прежде чем спрашивать, что не было убедительного решения, причина, по которой эта ошибка: lib1.so и lib2.so не в порядке, очень вероятно, где не скомпилированы для 64 ПК, но для 32 бит, иначе lib3.so - это 64-битный lib. По крайней мере, это моя гипотеза.
ОЧЕНЬ, к сожалению, ldconfig не дает чистого сообщения об ошибке, информирующего о том, что он не может загрузить библиотеку, он только накачивает:
ldconfig:/folder_where_the_wicked_lib_is/не является символической ссылкой
Я решил это, когда я удалил libs, не найденные ldd над двоичным. Теперь легче, что я знаю, где лежит проблема.
Моя версия ld:
GNU ld версии 2.20.51, и я не знаю, имеет ли последняя версия лучшее сообщение для своих пользователей.
Спасибо.
Ответ 3
Вам нужно указать путь к библиотекам внутри /etc/ld.so.conf и rerun ldconfig, чтобы просмотреть список
Другая возможность - включить в переменную env LD_LIBRARY_PATH путь к вашей библиотеке и перезапустить исполняемый файл.
проверьте символические ссылки, если они указывают на допустимую библиотеку...
Вы можете добавить путь непосредственно в /etc/ld.so.conf, без включения...
запустите ldconfig -p
, чтобы узнать, включена ли ваша библиотека в кеш.
Ответ 4
Я просто выполнил следующую команду:
export LD_LIBRARY_PATH=/usr/lib/
Теперь он работает нормально.
Ответ 5
простой запуск в оболочке: sudo apt-get install --reinstall libexpat1
есть та же проблема с libxcb - решается таким образом - очень быстро :)