Перейти к содержанию

glibc⚓︎

Пакет содержит стандартную библиотеку языка Си (GNU C Library). Эта библиотека предоставляет функции для выделения памяти, поиска каталогов, открытия и закрытия файлов, чтения и записи файлов, обработки строк, соответствия шаблонов (pattern matching), арифметических операций, и т.д.

Версия: 2.34

Размер: 16.50Mb

Приоритет: Необходимый

Оригинальное расположение: https://ftp.gnu.org/gnu/glibc/glibc-2.34.tar.xz

Ссылка для загрузки: https://lx4u.ru/downloads/packages/glibc-2.34.tar.xz

MD5: 31998b53fb39cb946e96abc310af1c89

Домашняя страница: https://gnu.org/software/glibc

SBU (Сборка временной системы): 5.4

SBU: 4.2

Настройка⚓︎

Необходимо создать две символические ссылки:

ln -sfv ../lib/ld-linux-x86-64.so.2 $LIN/lib64
ln -sfv ../lib/ld-linux-x86-64.so.2 $LIN/lib64/ld-lsb-x86-64.so.3

Первая ссылка используется GCC, вторую требует LSB.

В пакете Glibc по умолчанию используется несоответствующая стандарту FHS директория /var/db. Для исправления этого примените патч:

patch -Np1 -i ../glibc-2.34-fhs-1.patch

Пакет Glibc требует использовать отдельную директорию для сборки. Создайте её:

mkdir -v build
cd       build

Убедитесь, что утилиты ldconfig и sln установлены в /usr/sbin:

echo "rootsbindir=/usr/sbin" > configparms

Запустите скрипт configure:

 ../configure                            \
      --prefix=/usr                      \
      --host=$LIN_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2                \
      --with-headers=$LIN/usr/include    \
      libc_cv_slibdir=/lib               \
      --disable-nscd                     \
      --disable-timezone-tools

Для multilib⚓︎

Добавьте параметр --enable-multi-arch

Значения параметров⚓︎

--host=$LIN_TGT, --build=$(../scripts/config.guess) - необходимо для кросс-компиляции.

--enable-kernel=3.2 - оптимизирует glibc для использования с ядрами новее 3.2.

--with-headers=$LIN/usr/include - задает путь к заголовкам ядра.

--disable-nscd, --disable-timezone-tools - демон nscd и инструменты для управления часовыми поясами не нужны для временной glibc.

Сборка⚓︎

make

Установка⚓︎

make DESTDIR=$LIN install

Исправьте жестко заданный путь к исполняемому загрузчику в скрипте ldd:

sed '/RTLDLIST=/s@/usr@@g' -i $LIN/usr/bin/ldd

Завершите установку файла limits.h, запустив скрипт из состава GCC:

$LIN/tools/libexec/gcc/$LIN_TGT/11.2.0/install-tools/mkheaders

Тестирование⚓︎

Предупреждение

На данном этапе необходимо убедиться, что установленные ранее пакеты работают правильно. Внимательно изучите результаты вывода команд, и проверьте, что они строго соответствуют результатам вывода, приведенным ниже. Если есть несоответствия, значит инструкции на предыдущих этапах были выполнены некорректно.

Чтобы проверить правильность работы кросс-компилятора и libc, выполните:⚓︎

echo 'int main(){}' > dummy.c
$LIN_TGT-gcc dummy.c
readelf -l a.out | grep '/ld-linux'

Вывод должен быть таким:⚓︎

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Если все хорошо, удалите ненужные файлы:⚓︎

rm -v dummy.c a.out

Для multilib⚓︎

Для MultiLib требуется установить 32-битную версию glibc. Для этого, удалите оставшиеся файлы от 64-битной сборки glibc:

Настройка⚓︎

rm -rf ./*
find .. -name "*.a" -delete

Запустите скрипт configure:

CC="$LIN_TGT-gcc -m32"                   \
CXX="$LIN_TGT-g++ -m32"                  \
../configure                             \
      --prefix=/usr                      \
      --host=$LIN_TGT32                  \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2                \
      --with-headers=$LIN/usr/include    \
      --enable-multi-arch                \
      --libdir=/usr/lib32                \
      --libexecdir=/usr/lib32            \
      libc_cv_slibdir=/lib32             \
      --disable-nscd                     \
      --disable-timezone-tools

Сборка⚓︎

make

Установка⚓︎

Установите 32-битные библиотеки из этого пакета:

make DESTDIR=$PWD/DESTDIR install
cp -a DESTDIR/lib32/*     $LIN/lib32/
cp -a DESTDIR/usr/lib32 $LIN/usr/
install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \
               $LIN/usr/include/gnu/
ln -svf ../lib32/ld-linux.so.2 $LIN/lib/ld-linux.so.2

Проверка работоспособности⚓︎

Чтобы проверить работоспособность 32-битной glibc, выполните:

echo 'int main(){}' > dummy.c
$LIN_TGT-gcc -m32 dummy.c
readelf -l a.out | grep '/ld-linux'

Вывод должен быть таким:

[Requesting program interpreter: /lib/ld-linux.so.2]

Если всё хорошо, удалите ненужные файлы:

rm -v dummy.c a.out
Back to top