我正在尝试在Alpine Linux上安装glibc
。我在Docker中运行Alpine Linux。这是我正在使用的步骤:
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
我在 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,则该脚本将无法正常运行 主要图书馆!
答案 0 :(得分:1)
最终,为了在Alpine Linux上构建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
我希望这些步骤也适用于其他所有人。
答案 1 :(得分:0)
安装musl-dev
也会使您摆脱该构建错误,因此您将针对musl构建glibc。
musl-dev
软件包有自己的/usr/lib/libssp_nonshared.a
: