почему после правильной настройки LD-LIBRARY_PATH и ld.so.cache по-прежнему возникают проблемы с поиском библиотек? - PullRequest
1 голос
/ 02 сентября 2010

У меня есть определенная библиотека общих объектов в специальной директории, которую я

  • убедитесь, что специальный каталог находится в $ LD_LIBRARY_PATH
  • убедитесь, что этот каталог имеет разрешения на чтение и выполнение для всех
  • убедитесь, что соответствующий каталог библиотеки находится в ld.so.conf и что root выполнил ldconfig (проверьте, проверив библиотеку, используя ldconfig -p в качестве normaluser.
  • убедитесь, что у него нет проблем с сонами (т. Е. Создайте несколько символических ссылок при необходимости)

Теперь, скажем, я скомпилировал программу, которая нуждается в этой специальной библиотеке, программу, упакованную типичным способом с открытым исходным кодом, который ./configure && make и т. Д.), И он говорит, что -lspecialibrary не может быть найден, ошибка, из-за отсутствия какой-либо из вышеперечисленных проверок также, вероятно, выбросить.

Обходной путь, который я сделал, - это символическая ссылка на библиотеку / usr / local / lib64, и внезапно в библиотеке обнаружен ben. Также при компиляции относительно простого пакета я вручную добавляю -L / path / в / spec / lib, и это тоже сработало. Но я расцениваю эти два метода как хаки, поэтому я искал какие-либо подсказки о том, почему мой список проверок недостаточно хорош для поиска библиотеки.

(я особенно нахожу $ LD_LIBRARY_PATH поверхностного использования. Фактически я могу исключить из него определенные библиотеки, и они все равно будут найдены в процессе компиляции).

1 Ответ

4 голосов
/ 29 декабря 2010

$LD_LIBRARY_PATH и ldconfig используются только для поиска библиотек при запуске программ, которым нужны библиотеки, т.е. они используются загрузчиком, а не компилятором.Ваша программа зависит от libspeciallibrary.so.Когда работает , ваша программа $LD_LIBRARY_PATH и ldconfig получают запрос на поиск libspeciallibary.so.

Эти методы не используются вашим компилятором для поиска библиотек.Для вашего компилятора опция -L - правильный путь.Поскольку ваш пакет использует автоинструменты, вы должны установить переменную окружения $LDFLAGS:

LDFLAGS=-L/path/to/lib ./configure && make

Это также задокументировано в справке по настройке:

./configure --help
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...