2021-04-30 22:04:04 +08:00
|
|
|
|
<package-info :package="package" showsbu></package-info>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
new Vue({
|
|
|
|
|
el: '#main',
|
2021-05-02 22:00:17 +08:00
|
|
|
|
data: { package: {}, patch: {} },
|
2021-04-30 22:04:04 +08:00
|
|
|
|
mounted: function () {
|
2021-05-02 22:00:17 +08:00
|
|
|
|
this.getPackage();
|
|
|
|
|
this.getPatch();
|
2021-04-30 22:04:04 +08:00
|
|
|
|
},
|
|
|
|
|
methods: {
|
2021-05-02 22:00:17 +08:00
|
|
|
|
getPackage: function() {
|
|
|
|
|
getPackage('glibc')
|
2021-04-30 22:04:04 +08:00
|
|
|
|
.then(response => this.package = response);
|
|
|
|
|
},
|
2021-05-02 22:00:17 +08:00
|
|
|
|
getPatch: function() {
|
|
|
|
|
getPackage('glibc-patch')
|
|
|
|
|
.then(response => this.patch = response);
|
|
|
|
|
},
|
2021-04-30 22:04:04 +08:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
## Дополнительные необходимые файлы
|
|
|
|
|
|
2021-05-02 22:00:17 +08:00
|
|
|
|
<a :href="patch.url">
|
|
|
|
|
{{ patch.url }}
|
|
|
|
|
</a>
|
2021-04-30 22:04:04 +08:00
|
|
|
|
|
|
|
|
|
## Сборка
|
|
|
|
|
|
|
|
|
|
Во первых необходимо создать две символические ссылки:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
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`. Для соответствия с FHS примените патч:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
patch -Np1 -i ../glibc-2.33-fhs-1.patch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Документация glibc рекомендует использовать для сборки отдельную директорию:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build
|
|
|
|
|
cd build
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Далее запустите скрипт `configure`:
|
|
|
|
|
|
|
|
|
|
```bash
|
2021-05-03 00:58:15 +08:00
|
|
|
|
../configure \
|
2021-04-30 22:04:04 +08:00
|
|
|
|
--prefix=/usr \
|
|
|
|
|
--host=$LIN_TGT \
|
|
|
|
|
--build=$(../scripts/config.guess) \
|
|
|
|
|
--enable-kernel=3.2 \
|
|
|
|
|
--with-headers=$LIN/usr/include \
|
|
|
|
|
--libdir=/usr/lib \
|
|
|
|
|
--libexecdir=/usr/lib \
|
|
|
|
|
libc_cv_slibdir=/lib \
|
|
|
|
|
libc_cv_include_x86_isa_level=no \
|
|
|
|
|
--disable-nscd \
|
|
|
|
|
--disable-timezone-tools
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Для MultiLib добавьте параметр `--enable-multi-arch`
|
|
|
|
|
|
|
|
|
|
### Объяснение параметров configure
|
|
|
|
|
|
|
|
|
|
`--host=$LIN_TGT --build=$(../scripts/config.guess)` - необходимо для кросс-компиляции.
|
|
|
|
|
|
|
|
|
|
`--enable-kernel=3.2` - оптимизирует glibc для использования с ядром 3.2.
|
|
|
|
|
|
|
|
|
|
`--with-headers=$LIN/usr/include` - задает путь к заголовкам ядра.
|
|
|
|
|
|
|
|
|
|
`libc_cv_include_x86_isa_level=no` - исключает возможную ошибку.
|
|
|
|
|
|
|
|
|
|
` --disable-nscd --disable-timezone-tools` - демон nscd и инструменты для управления часовыми поясами не нужны для временной glibc.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Далее соберите этот пакет:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
make
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Установка
|
|
|
|
|
|
|
|
|
|
Чтоб установить glibc выполните:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
make DESTDIR=$LIN install
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Также, окончите установку файла `limits.h`, запустив скрипт из состава GCC:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$LIN/tools/libexec/gcc/$LIN_TGT/11.1.0/install-tools/mkheaders
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Тестирование
|
|
|
|
|
|
|
|
|
|
Чтобы проверить правильность работы кросс-компилятора и libc выполните:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
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]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Если все хорошо, удалите не нужные файлы:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
rm -v dummy.c a.out
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Для MultiLib
|
|
|
|
|
|
|
|
|
|
Для MultiLib требуется установить 32-битную версию glibc.
|
|
|
|
|
Для этого, во первых удалите оставшиеся от 64-битной сборки glibc:
|
|
|
|
|
|
|
|
|
|
```bash
|
2021-05-03 00:35:46 +08:00
|
|
|
|
rm -rf ./*
|
2021-04-30 22:04:04 +08:00
|
|
|
|
find .. -name "*.a" -delete
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Далее запустите скрипт `configure`:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
CC="$LIN_TGT-gcc -m32" \
|
|
|
|
|
CXX="$LIN_TGT-g++ -m32" \
|
2021-05-03 00:58:15 +08:00
|
|
|
|
../configure \
|
2021-04-30 22:04:04 +08:00
|
|
|
|
--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 \
|
|
|
|
|
libc_cv_include_x86_isa_level=no \
|
|
|
|
|
--disable-nscd \
|
|
|
|
|
--disable-timezone-tools
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Соберите пакет:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
make
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Установите 32-битные библиотеки из этого пакета:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
make DESTDIR=$PWD/DESTDIR install
|
|
|
|
|
cp -a DESTDIR/lib32/* $LFS/lib32/
|
|
|
|
|
cp -a DESTDIR/usr/lib32 $LFS/usr/
|
|
|
|
|
install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \
|
|
|
|
|
$LFS/usr/include/gnu/
|
|
|
|
|
ln -svf ../lib32/ld-linux.so.2 $LFS/lib/ld-linux.so.2
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Чтобы проверить работоспособность 32-битной glibc выполните
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
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]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Если все хорошо, удалите не нужные файлы:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
rm -v dummy.c a.out
|
|
|
|
|
```
|