Вопрос или проблема
Во время установки цепочки инструментов, когда устанавливается glibc, возникает сообщение об ошибке
zic: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Я проверил порядок сборки и установки пакетов из rpm в списке rpm. Он выглядит так:
binutils_cross gcc11_bootstrap glibc libstdc++_bootstrap binutils gcc11
После некоторого расследования я выяснил, что
libstdc++.so.6 устанавливается rpm-пакетом gcc11 вместе с libstdc++.so.6.0.24 и libstdc++.so.6.0.24-gdb.py.
И пока не наступает время установки glibc, libstdc++.so.6 нет в требуемом пути.
Ошибка сообщается, когда информация о часовом поясе компилируется командой ‘zic’, как указано в файле спецификаций glibc в разделе %post после %install
zic -L /dev/null -d $ZONEINFO $ZONEINFO/${tz}
Вопрос – Требуется ли zic, компилятор часовых поясов, действительно libstdc++.so.6 для компиляции информации о часовых поясах? Как я могу предоставить libstdc++.so.6 до установки rpm gcc11?
Я использую Linux openSUSE Leap 42.3
С уважением
Ответ или решение
В процессе установки инструментария, вы столкнулись с ошибкой, связанной с отсутствием библиотеки libstdc++.so.6, которая необходима во время выполнения команды zic
, компилирующей информацию о временных зонах. Давайте разберемся, почему это происходит и как можно решить данную проблему.
Теория
zic
— это компилятор временных зон, который обычно используется в процессе установки glibc для обработки временных данных. При этом он может зависеть от библиотек, которые обеспечивают корректное выполнение команд на вашей системе. В данном случае, ошибка связана с отсутствием библиотеки libstdc++.so.6, которую предоставляет пакет gcc11.
Проблема в порядке установки пакетов: библиотека libstdc++.so.6 устанавливается позже, чем необходима для выполнения zic
. Именно это приводит к ошибке загрузки, так как zic не может найти нужную библиотеку на этапе компиляции временных зон.
Пример
Ваша последовательность установки пакетов из rpm выглядит следующим образом:
binutils_cross gcc11_bootstrap glibc libstdc++_bootstrap binutils gcc11
В этой последовательности библиотека libstdc++.so.6 устанавливается только на этапе установки gcc11, а не в момент установки glibc, где она требуется.
Применение
Для решения проблемы можно предпринять следующие шаги:
-
Измените порядок установки пакетов: Убедитесь, что libstdc++.so.6 доступен до установки glibc. Это можно сделать, если переместить установку libstdc++_bootstrap или самих библиотеки libstdc++.so.6 в более ранний этап, до выполнения
zic
в процессе установки glibc. -
Используйте временное решение: Поскольку glibc требует эту библиотеку в процессе %post, можно временно скопировать необходимую библиотеку в нужное место вручную, а затем удалить после завершения установки.
-
Убедитесь, что пути указаны правильно: Проверьте переменные окружения, такие как
LD_LIBRARY_PATH
, чтобы гарантировать, что устанавливаемая библиотека доступнаzic
.
Решение этой проблемы может потребовать настройки различных аспектов системы и порядка сборки пакетов, но, следуя данным рекомендациям, вы сможете устранить ошибку и обеспечить корректную установку инструментария.