golang编译遇到glibc问题,可以这样解决!
2024-1-1 17:17:3 Author: mp.weixin.qq.com(查看原文) 阅读量:17 收藏

前言

大家好,我是testerzhang, 今天分享一个编译的技巧。

问题描述

由于我的编译机器是CentOS8系统,而我要部署的系统是CentOS7.6,那么当你编译一个golang二进制文件的时候,你会因为glibc的不同导致在低系统版本运行不起来。

报错现象:

‘GLIBC_2.28’ not found

因为Centos7.6默认是glibc-2.17

$  rpm -qa|grep glibc
glibc-devel-2.17-307.el7.1.x86_64
glibc-common-2.17-307.el7.1.x86_64
glibc-headers-2.17-307.el7.1.x86_64
glibc-2.17-307.el7.1.x86_64

难道我要搞一台CentOS7的机器来编译?有没有其他办法?

答案是Docker 构造一个CentOS7机器进行编译

2.制作一个CentOS7-golang1.7镜像

2.1 原始步骤

2.1.1 拉取基础镜像

 $ docker pull centos:centos7.9.2009

2.1.2 根据镜像生成容器

 $ docker exec -it centos7.9  /bin/sh

2.1.3 容器操作

2.1.3.1 安装基础信息

# yum install -y which

# yum install -y wget

# yum install -y gcc*

2.1.3.2 安装go环境

# mkdir ~/go

# mkdir ~/3rd

# cd ~/3rd/

# wget https://mirrors.ustc.edu.cn/golang/go1.17.13.linux-amd64.tar.gz

# rm -rf go1.17.13.linux-amd64.tar.gz

# yum clean all

2.1.3.3 退出容器

[root@16505eab3538 ~]# exit
exit
sh-4.2# exit
exit

2.1.4 容器打包为基础镜像

# 格式docker commit -m '描述' -a '作者' -p 容器名 镜像名:标签名

docker commit -m 'centos7.9 glibc-2.17 go1.7' -a 'testerzhang' -p centos7.9 go1.17:v1.0

3.傻瓜式的方式

3.1 制作Dockerfile.dev

将上面的操作写到一个制作Dockerfile文件里

FROM centos:centos7.9.2009

SHELL ["/bin/bash", "-c"]
RUN echo $PATH

RUN yum install -y which wget gcc* && mkdir -p ~/go && mkdir -p ~/3rd && cd  ~/3rd && wget https://mirrors.ustc.edu.cn/golang/go1.17.13.linux-amd64.tar.gz && tar zxf go1.17.13.linux-amd64.tar.gz && rm -rf go1.17.13.linux-amd64.tar.gz && yum clean all

3.2 写一个Makefile来快捷编译

上面写完了Dockerfile文件,然后我们执行

docker build --rm -t mygolang1.7 -f ./Dockerfile.dev .

但是有时候命令记不住,那么我们就写一个Makefile文件

VERSION="v1.0.0"
CONTAINER=mygolang1.7

docker-img:
    docker build --rm -t $(CONTAINER) -f ./Dockerfile.dev .

然后执行

make docker-img

就可以生成自定义镜像,是不是很方便。

后续流程

1.有了Go1.17这个基础系统镜像,我们根据这个镜像run出一个容器,同时将本地的项目源码目录挂载过去。

2.编译二进制文件后生成gz压缩包。

3.删除生成的二进制文件。

文末

为啥没使用alpine制作镜像?

主要是已有的一些镜像glibc版本还是太高,或者是没依赖glibc编译部署后缺少musl依赖。为了保证系统一致性,减少不必要的麻烦,还是选择了CentOS系统来做基础镜像,缺点就是镜像占用1G硬盘空间。

自己组建了一个新的交流群,需要进群交流,可以扫描下方加群二维码,也可以在公众号后台回复【加技术群】即可收到相应说明。

喜欢的话可以点击"收藏"进行稍后阅读,可以点击"在看"支持下,也可以分享下此文章给你的其他朋友。

欢迎关注我的公众号“testerzhang”,原创技术文章第一时间推送。

不错,赏个鸡腿!


文章来源: http://mp.weixin.qq.com/s?__biz=MzI5ODYxMzE4NA==&mid=2247485146&idx=1&sn=e7de94ae735ed14539bb4da28a62775a&chksm=eca26675dbd5ef637bd8d2108208e4172d8b8a16ca67a018c47f2aa602a337ebc77418246554&mpshare=1&scene=1&srcid=0101PWKxZdajAInIcmXH9PyD&sharer_shareinfo=84cb90152d0d4775d9c2ba1e24ab0eba&sharer_shareinfo_first=84cb90152d0d4775d9c2ba1e24ab0eba#rd
如有侵权请联系:admin#unsafe.sh