Ошибки при сборке glibc на Alpine Linux - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь установить glibc на Alpine Linux.Я использую 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

Iя получаю следующую ошибку на шаге 11 :

/ usr / lib / gcc / x86_64-alpine-linux-musl / 6.4.0 /../../ ../../x86_64-alpine-linux-musl/bin/ld: невозможно найти -lssp_nonshared

collect2: ошибка: 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)

Вы должны перезапустить этот скрипт из вашего каталога сборки после того, как вы исправите все проблемы!

Кстати.скрипт не работает, если вы устанавливаете GNU libc не как свою основную библиотеку!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

В конце концов, я изменил несколько шагов, чтобы собрать glibc в Alpine Linux.

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

  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

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

0 голосов
/ 12 октября 2018

Установка 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

...