Ошибки при сборке glibc на Alpine Linux

Я пытаюсь установить glibc на альпийском линуксе. Я использую Alpine Linux в Docker. Вот шаги, которые я использую:

  1. docker pull alpine
  2. docker run -it alpine /bin/sh
  3. apk add --no-cache make gcc linux-headers bsd-compat-headers gawk bison binutils coreutils diffutils gettext bash grep sed texinfo perl
  4. wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
  5. tar -xzf glibc-2.28.tar.gz
  6. cd glibc-2.28
  7. mkdir glibc-build
  8. cd glibc-build
  9. ../configure --prefix=/usr \ --disable-profile --enable-add-ons \ --libexecdir=/usr/bin --with-headers=/usr/include \ --enable-static-pie
  10. cat > /etc/ld.so.conf << "EOF"

    # Begin /etc/ld.so.conf
    
    /usr/local/lib
    /opt/lib
    
    # End /etc/ld.so.conf
    EOF
    
  11. make

  12. 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 на альпийском линуксе.

Вот шаги, которые работали для меня:

  1. docker pull alpine
  2. docker run -it alpine /bin/sh
  3. wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
  4. tar -xzf glibc-2.28.tar.gz
  5. cd glibc-2.28
  6. mkdir glibc-build
  7. cd glibc-build
  8. apk add --no-cache make gcc gawk bison linux-headers libc-dev
  9. ../configure --prefix=/usr \ --disable-profile --enable-add-ons \ --libexecdir=/usr/lib --with-headers=/usr/include \ --without-cvs --enable-static-pie
  10. 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
  11. make
  12. make install

Я надеюсь, что эти шаги будут работать и для всех остальных.

Установка musl-dev Должно помочь вам избежать этой ошибки сборки, так что вы будете собирать glibc против musl.

musl-dev пакет имеет свой /usr/lib/libssp_nonshared.a:

https://pkgs.alpinelinux.org/contents?file=libssp_nonshared.a&path=&name=musl-dev&branch=v3.8&repo=main&arch=x86_64

Другие вопросы по тегам