Одни люди ищут - причины, другие - возможности, выигрывают последние

Ldconfig самая полезная команда для новичков сборки в Linux

Рано или поздно любой из начинающих изучать Линукс сталкивается с такой задачей как сборка (компиляция) какого-либо пакета (программы) из исходных кодов (source code). Такая необходимость возникает довольно часто при обновлении программного продукта, либо его установки из CVS источников, либо вообще есть программные продукты которые не распространяются в package (rpm, deb) формате, а только в исходных кодах.

По сути дела задача довольно тривиальная и сводится, как правило, к набору команд ./configure; make; make install, да к тому-же весь процесс сборки и инсталяции подробно описывается в пояснительных файлах пакета, к примеру README, INSTALL, INSTALL-SOURCE, documentation, SOURCE и т.п., хотя это далеко не факт, что такие описания могут вообще присутствовать.

Все бы ничего, но, камнем преткновения при сборке становятся самые распространенные ошибки, звучащие к примеру так:

error while loading shared libraries: xxxx.so.0
cannot open shared object file no such file or directory

Все эти ошибки вызваны одним: Ваш сборщик объектных файлов не смог найти необходимых ему библиотек сопутствующих продуктов, необходимых для полной корректной сборки. Конечно, можно залезть в скрипт сборки и начать там ручками править пути к этим библиотекам, хотя за Вас это должен был сделать конфигуратор, но случается что и он то-же не панацея, вобщем это не наш путь, наша палочка-выручалочка утилита ldconfig, которая создает необходимые связки и формирует кэш динамических библиотек установленных в Вашем Линуксе.
Вам всего лишь необходимо отредактировать файл /etc/ld.so.config, в котором хранятся пути к необходимым библиотекам. К примеру, можно забить туда строки:

/usr/local/lib
/usr/local/lib/mysql

и выполнить с консоли команду ldconfig, после которой эта утилита просмотрит указанные ей директории на наличие там библиотек и поместит ссылки на них в кэш.
Просмотреть, какие-же библиотеки в данный момент находятся в кэше можно командой:

ldconfig -p

И в ответ Вы получите длиннющий список, а поэтому, для более удобной конкретики, чтобы посмотреть, есть ли у Вас библиотеки от пакета mysql, можно так:

# ldconfig -p | grep mysql

libmysqlclient.so.10 (libc6) => /usr/local/lib/mysql/libmysqlclient.so.10
libmysqlclient.so (libc6) => /usr/local/lib/mysql/libmysqlclient.so

Поначалу, в пору своей первобытности в Линуксе, сам неоднократно наступал на эти грабли, и мои друзья на них наступали, и друзья моих друзей получали эти шишки ... и самое интересное, что пока, кроме Интернета, ни в одной книжке по Линукс я не встречал больших рекламных плакатов: "Изучите работу ldconfig!!!", а стоило бы это кричать уже на первых страницах.

Короче, - берегите лоб, надеюсь я Вам помог в этом.

9 комментариев на статью:
Ответить
Обязательные поля помечены *