美文网首页Golang 开发者编程随笔Go
go语言编译真正的静态可执行文件

go语言编译真正的静态可执行文件

作者: 从火星来 | 来源:发表于2020-03-04 16:22 被阅读0次

我们在linux上编译带有网络功能的go程序,得到的可执行程序还是一个动态链接程序,依赖系统中的libc运行,如果部署到服务器上,还是需要保证服务器的libc版本不低于编译平台的libc版本,否则有可能不能运行。

要把go程序编译成真正的静态可执行文件,必须把libc也静态编译进可执行文件中。下面我就以glibc-2.30为例,演示一下怎么把libc静态编译进入go程序。

第一步、从http://ftp.gnu.org/gnu/glibc/下载源代码glibc-2.30.tar.bz2

第二步、编译安装glibc。假设glibc-2.30.tar.bz2保存在HOME/src/glibc230目录中,目标是把编译好的glibc安装到/opt/glibc230中,现在到该目录中执行下面的命令:

sudo mkdir /opt/glibc230
tar xvfj glibc-2.30.tar.bz2
#在 ubuntu18.04 中使用下面的命令配置 Makefile
./glibc-2.30/configure --prefix=/opt/glibc230 
#在 ubuntu19.10 中使用下面的命令配置 Makefile
./glibc-2.30/configure --prefix=/opt/glibc230 --enable-cet
make
sudo make install

到这里已经安装好了 glibc-2.30 ,可以在/opt/glibc230/lib目录中看到后缀为.a的一些静态库。

第三步、编译真正的静态可执行文件。

到你的go程序目录中执行命令:

go build -ldflags '-s -w -L /opt/glibc230/lib -linkmode "external" -extldflags "-static"'

会显示一些警告,但是不影响结果。

相关文章

  • Golang 的静态编译

    Go语言和C语言的一个很大的区别是,Go语言只静态编译,做个测试: 一方面是Go语言编译后的可执行文件大小比C语言...

  • go语言编译真正的静态可执行文件

    我们在linux上编译带有网络功能的go程序,得到的可执行程序还是一个动态链接程序,依赖系统中的libc运行,如果...

  • golang最小docker镜像制作

    因为go语言编译好之后为可执行文件,不需要依赖go语言环境即可运行,所以可以在带go语言的docker镜像中编译,...

  • golang学习(1):go的安装和工作空间

    1 go语言特点:原生支持高并发,带垃圾回收,快速编译静态编译型语言 2 go安装: 2.1go的几种安装方式 2...

  • Golang 学习笔记

    golang 简介 静态 强类型 编译型语言 GO语言适用场景及GO语言的优势Go语言是谷歌推出的一种全新的编程...

  • golang取代nginx布置前端项目(vue),mime问题,

    前言:某些原因,想直接使用go编译生成的可执行文件+前端编译好的静态文件,直接布置项目,不用依赖于nginx。 想...

  • 交叉编译

    使用go的交叉编译 最后使用go build windows_fping.go 编译出.exe可执行文件 如果编译...

  • Golang的入门教程(一)

    Go语言特性 Go语言是Google公司开发的一种静态的,编译型并自带垃圾回收和并发的变成语言.Go语言的风格类似...

  • Go语言学习笔记-变量与作用域

    Go 语言变量的声明 Go 语言是静态类型语言,因此变量 (variable) 是有明确类型的,编译器也会检查变量...

  • Go语言简介

    一、什么是Go语言? Go是一门开源、并发支持、具有垃圾回收机制、编译性系统编程语言,在静态编译语言的高性能和...

网友评论

    本文标题:go语言编译真正的静态可执行文件

    本文链接:https://www.haomeiwen.com/subject/kchblhtx.html