[Go运行问题]/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_xx‘ not found-解决方案

一、 提升运行环境的gcc版本

可以采用容器技术,将该程序部署到指定版本的ubuntu容器中执行

二、 降低编译环境的gcc版本

方案1:

通过CGO参数,可以指定gcc的版本。 不过这个前提是你需要在目标机器上把libc.so文件拷贝出来,然后复制到编译机器上。(注意:不要放置到系统路径下)

然后通过如下参数来编译

CGO_LDFLAGS='-g -O2 -Wl,-rpath=. -Wl, --dynamic-linker=ld-linux-x86-64.so.2' 

CGO_CFLAGS="-L. -l/my/path/libc.so.6,/my/path/ld-linux-x86-64.so.2"

go build

其中-rpath是指运行时指定寻找libc.so的路径,请根据你的环境来修改。
编译完成后,通过ldd看以下依赖.

但是需要注意的是,如果依赖的二进制库也是依赖libc编译的,那么这些库可能也存在一样的依赖问题。所以这种情况只适合没有其他依赖库依赖cgo的情况。

验证

使用LD_PRELOAD可以加载与本机不同的libc来运行程序

LD_PRELOAD=/lib64/libc.so xxx

方案2:

同样采用容器化来部署相同的编译环境


上一篇:【c++】类和对象(七)


下一篇:【Go】五、流程控制-for