在Alpine Linux上构建glibc时出错

时间:2018-10-12 10:08:05

标签: docker glibc alpine

我正在尝试在Alpine Linux上安装glibc。我在Docker中运行Alpine Linux。这是我正在使用的步骤:

  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

我在 11th 步骤上遇到以下错误:

  

/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:全部]错误2

如果我尝试添加--disable-shared标志,则会发生另一个错误。

可以通过使用以下命令添加libc-dev来解决错误:apk add --no-cache libc-dev。但是这样,我将拥有两个C库,但是我需要我的应用程序专门使用glibc

更新

如果我运行apk add --no-cache libc-dev,则make命令成功通过,但是make install失败,并出现以下错误:

  

执行gcc失败!

     

该脚本发现您的安装有问题!

     

请阅读常见问题解答和自述文件,并检查以下内容:

     
      
  • 您是否更改了gcc规范文件(从升级后必须   Linux libc5)?

  •   
  • 是否存在旧库的形式为libXXX.so的符号链接?

         

    libm.so-> libm.so.5(其中libm.so.5是旧库)之类的链接是错误的,

         

    libm.so应该指向新安装的glibc文件-应该存在

         

    只有一个这样的链接(例如/ lib和/ usr / lib)

  •   
     

完成后,应从构建目录重新启动此脚本。   解决了所有问题!

     

顺便说一句。如果您要安装GNU libc,则该脚本将无法正常运行   主要图书馆!

2 个答案:

答案 0 :(得分:1)

最终,为了在Alpine Linux上构建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

我希望这些步骤也适用于其他所有人。

答案 1 :(得分:0)

安装musl-dev也会使您摆脱该构建错误,因此您将针对musl构建glibc。

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