Вопрос или проблема
Я следовал этой инструкции на этом сайте для установки tesseract: https://github.com/tesseract-ocr/tesseract/wiki/Compiling
git clone https://github.com/tesseract-ocr/tesseract.git
cd tesseract
./autogen.sh
./configure
make
sudo make install
sudo ldconfig
Но в последней строке возникла проблема, и я получил следующие сообщения об ошибке, когда попробовал ldconfig
:
/sbin/ldconfig.real: /usr/local/lib не является известным типом библиотеки
/sbin/ldconfig.real: /usr/local/lib/pkgconfig не является известным типом библиотеки
Что означает эта ошибка и как я могу её исправить?
Вот содержимое /etc/ld.so.conf.d/libc.conf
:
# либк по умолчанию
/usr/local/lib
Да, вы не можете компилировать, если ваш компоновщик не знает, где находятся ваши библиотеки. ldconfig — это утилита, которая настраивает ваши связанные библиотеки, и она ищет, чтобы вы указали ей, где находятся ваши общие библиотеки в /etc/ld.so.conf.d/libc.conf. Проблема в том, что в этом конфигурационном файле вы указали всего одну директорию, но она не является действительной.
Вам нужно добавить правильные пути к вашим общим библиотекам в ld.so.conf.
Инструкция говорит, что вам нужно установить пакет leptonica-dev, чтобы иметь эти общие библиотеки, так как то, что вы пытаетесь собрать, зависит от них для компиляции. Я предполагаю, что вы этого не сделали, так как он не может найти общие библиотеки.
Я немного нов здесь, но странно, что я могу потерять баллы за то, что предоставил совершенно законный ответ. Это не оставляет большого стимула помогать, если их система вознаграждения полностью сбита.
Ответ или решение
Проблема, которую вы встречаете во время установки Tesseract, связана с утилитой ldconfig
, которая сообщает об ошибке: "/usr/local/lib is not a known library type" и "/usr/local/lib/pkgconfig is not a known library type". Эта ошибка указывает на проблему с конфигурацией системного кеша динамических библиотек в Linux.
Разбор проблемы
-
Что делает
ldconfig
?
Утилитаldconfig
обновляет кэш библиотек, проверяя, где находятся динамические библиотеки на вашем компьютере. Она читает файлы конфигурации из/etc/ld.so.conf
и из всех файлов в каталогеld.so.conf.d
, чтобы определить, какие пути следует добавлять в кеш. -
Содержимое конфигурационного файла
В вашем случае файл/etc/ld.so.conf.d/libc.conf
содержит только одну строку:/usr/local/lib
. Это означает, что утилитаldconfig
ищет библиотеки в этой директории. Однако сообщение об ошибке говорит о том, что указанный путь не распознается как допустимый тип библиотеки.
Возможные причины проблемы:
- Директория
/usr/local/lib
может не существовать на вашей системе. - В
/usr/local/lib/pkgconfig
может отсутствовать необходимый файл или структура, необходимая для корректного выполненияldconfig
. - Отсутствие установленного пакета, от которого зависит Tesseract, например,
leptonica-dev
. Этот пакет содержит компоненты и библиотеки, необходимые для успешного завершения установки Tesseract.
Рекомендации по решению проблемы
-
Проверьте существование директорий
Выполните команду:ls -ld /usr/local/lib
Если директория не существует, создайте ее:
sudo mkdir -p /usr/local/lib
-
Проверьте содержимое
/usr/local/lib
Убедитесь, что библиотеки Tesseract и все зависимости (например,leptonica
) установлены в этой директории. Вы можете установить зависимость с помощью следующей команды:sudo apt-get install libleptonica-dev
-
Обновите конфигурацию
ldconfig
Измените содержимое/etc/ld.so.conf.d/libc.conf
, если необходимо, добавив дополнительные пути, если вы знаете, где расположены другие библиотеки:Пример:
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/local.conf
-
Повторите запуск
ldconfig
После того как все библиотеки установлены и конфигурация обновлена, попробуйте снова выполнить:sudo ldconfig
Проверьте, исчезла ли ошибка.
Заключение
Следуя приведенным рекомендациям, вы сможете устранить проблему с ldconfig
и успешно установить Tesseract на вашем устройстве. Если данная проблема все еще сохраняется, стоит проверить системные журналы и сообщения о ошибках, чтобы более детально разобраться в ситуации. Удачи вам в установке!