Подтвердить что ты не робот

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

4b9b3361

Ответ 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 - решается таким образом - очень быстро :)