搜答案时看到了这个问题...居然没人回答,好吧,搬运一下从各个平台收集过来的信息(

其实很简单,就是通过编译参数指定 glibc 版本即可。

懒得改命令测试了,我就直接用我自己测试的 2.28 版本为例:

wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.xz
build
tar -zvxf glibc-2.28.tar.gz
cd glibc-2.28 && mkdir build && cd build

3. 配置

加上自定义参数配置,我只是想让 glibc 编译通过,根本不 care 它代码警告,所以直接忽略掉:

../configure --prefix=/opt/glibc-2.28 --enable-cet --enable-werror=no

4. 最后执行经典make,完成编译:

make && make install 

5. 可能出现的报错

bison
apt install -y bison # centos: yum install -y bison
ld.so.conf: No such file or directory

这个报错好说,把本机的 ld.so.conf 拷贝过去

先尝试查找本机 ld.so.conf 的目录

find / -name 'ld.so.conf'

然后直接把文件复制到你指定的编译目录下:

cp /etc/ld.so.conf /opt/glibc-2.28/etc/ld.so.conf

解决完所有报错之后,在 ./build 目录下重新 make && make install 即可。

6. 把 glibc 特定版本编译完成后,最后在编译 go 程序时,加上参数:

../configure 
go build -ldflags '-s -w -L /opt/glibc-2.28/lib -linkmode "external" -extldflags "-static"'.

这样你就得到了一个指定 glibc 版本编译的 go 程序。