Ошибки при сборке glibc на Alpine Linux
Я пытаюсь установить glibc
на альпийском линуксе. Я использую Alpine Linux в Docker. Вот шаги, которые я использую:
docker pull alpine
docker run -it alpine /bin/sh
apk add --no-cache make gcc linux-headers bsd-compat-headers gawk bison binutils coreutils diffutils gettext bash grep sed texinfo perl
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar -xzf glibc-2.28.tar.gz
cd glibc-2.28
mkdir glibc-build
cd glibc-build
../configure --prefix=/usr \ --disable-profile --enable-add-ons \ --libexecdir=/usr/bin --with-headers=/usr/include \ --enable-static-pie
cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf /usr/local/lib /opt/lib # End /etc/ld.so.conf EOF
make
make install
Я получаю следующую ошибку на 11-м шаге:
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: не удается найти -lssp_nonshared
collect2: error: ld вернул 1 состояние выхода
make[2]: *** [Makefile:129: /glibc-2.28/glibc-build/elf/sotruss-lib.so] Ошибка 1
make [2]: выход из каталога '/glibc-2.28/elf'
make [1]: *** [Makefile: 258: elf / subdir_lib] Ошибка 2
make [1]: выход из каталога '/glibc-2.28'
make: *** [Makefile: 9: all] Ошибка 2
Если я попытаюсь добавить --disable-shared
флаг, чем другие ошибки происходят.
Ошибка может быть решена путем добавления libc-dev
с помощью следующей команды: apk add --no-cache libc-dev
, Но в этом случае у меня будет две библиотеки C, но мне нужно использовать приложение glibc
в частности.
ОБНОВИТЬ
Если я бегу apk add --no-cache libc-dev
, make
Команда успешно прошла, но make install
завершается со следующей ошибкой:
Выполнение gcc не удалось!
Сценарий обнаружил некоторые проблемы с вашей установкой!
Пожалуйста, прочтите FAQ и файл README и проверьте следующее:
Изменили ли вы файл спецификации gcc (необходимо после обновления с Linux libc5)?
Существуют ли какие-либо символические ссылки вида libXXX.so на старые библиотеки?
Ссылки типа libm.so -> libm.so.5 (где libm.so.5 - старая библиотека) неверны,
libm.so должен указывать на вновь установленный файл glibc - и там должно быть
только одна такая ссылка (проверьте, например, / lib и / usr / lib)
Вы должны перезапустить этот скрипт из вашего каталога сборки после того, как вы исправите все проблемы!
Btw. скрипт не работает, если вы устанавливаете GNU libc не как свою основную библиотеку!
2 ответа
В конце концов, я изменил несколько шагов, чтобы построить glibc
на альпийском линуксе.
Вот шаги, которые работали для меня:
docker pull alpine
docker run -it alpine /bin/sh
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar -xzf glibc-2.28.tar.gz
cd glibc-2.28
mkdir glibc-build
cd glibc-build
apk add --no-cache make gcc gawk bison linux-headers libc-dev
../configure --prefix=/usr \ --disable-profile --enable-add-ons \ --libexecdir=/usr/lib --with-headers=/usr/include \ --without-cvs --enable-static-pie
cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib /usr/lib /usr/lib64 /usr/libexec # End /etc/ld.so.conf EOF
make
make install
Я надеюсь, что эти шаги будут работать и для всех остальных.
Установка musl-dev
Должно помочь вам избежать этой ошибки сборки, так что вы будете собирать glibc против musl.
musl-dev
пакет имеет свой /usr/lib/libssp_nonshared.a
: