- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
CGO_ENABLED=1 我相信是当前的默认值,这意味着它取决于 GLIBC,它可以在更新和发行版之间进行重大更改。
CGO_ENABLED=0 是创建静态独立二进制文件的解决方法,为什么这不是默认值?
最佳答案
一般来说,CGO_ENABLED=1
导致更快、更小的构建和运行时——因为它可以动态加载主机操作系统的 native 库(例如 glibc
、DNS 解析器等)——在构建操作系统上运行时。这是本地快速发展的理想选择。对于部署,CGO_ENABLED=1
可能不切实际甚至不可能 - 在考虑部署托管操作系统时。
如果您纯粹使用标准库,则它们可能不一定需要启用 CGO。在某些标准库中,如果使用纯 Go 版本( CGO_ENABLED=0
)或启用 CGO 的版本,行为会有所不同:
CGO_ENABLED=1
使用 native 操作系统(例如在 Linux nsswitch
上)进行 ID 查找 CGO_ENABLED=0
使用基本的 Go 实现(例如从 /etc/passwd
读取)——不包括主机可能知道的其他 ID 注册表 CGO_ENABLED=1
二进制文件的大小可能更小,它也依赖于提供主机操作系统。比较 Docker 镜像:
ubuntu:20.04
是 73.9MB ( glibc
: GNU-libc) alpine:3.12.1
是 5.57MB ( musl
libc) alpine
它的最小尺寸看起来很有吸引力 - 但它的
libc
可能与依赖
glibc
的软件包不兼容.
CGO_ENABLED=0
然而,它是
scratch 的理想选择docker 镜像部署 - 因为不需要捆绑主机操作系统。
关于go - 为什么 CGO_ENABLED=1 默认?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64531437/
我们正在编译我们的 Go 代码以在 docker 上运行,并且我们正在调查为什么我们的二进制文件没有执行。我们发现它缺少一些动态库(尽管我们需要静态链接的二进制文件)。 这就是它的编译方式。env G
问题 请帮助理解 CGO_ENABLED 何时是必须且不可避免的,以及 go 编译过程会发生什么。 当 CGO_ENABLED 是必须的 在阅读了 引用 中的文章后,它似乎对目标平台有交叉编译原生支持
我有一个用 Golang 编写的小守护进程,它循环工作并做一些事情。我发现,在使用 CGO_ENABLE=1 或 CGO_ENABLED=0 编译时,守护进程的行为有所不同。例如,在 CGO_ENAB
CGO_ENABLED=1 我相信是当前的默认值,这意味着它取决于 GLIBC,它可以在更新和发行版之间进行重大更改。 CGO_ENABLED=0 是创建静态独立二进制文件的解决方法,为什么这不是默认
在编写利用网络的程序时,您会发现 CGO_ENABLED=0 的编译速度明显变慢。 例如最简单的HTTP服务器: package main import ( "flag" "fmt"
由于 libusb 依赖性,我正在尝试使用 CGO_ENABLED=1 为 Raspberry Pi 交叉编译 Golang 应用程序 在编译过程中出现错误: arm-linux-gnueabihf/
在 go/src 中的 make.bat 文件中(在解压缩 tar 之后),甚至在使用 CGO_ENABLED 检查之前就有一个 gcc 编译命令。这会扰乱引导工具构建。 出于安全原因,我无法通过 c
我想在 Golang 项目中使用 sqlite3。但是在 docker 容器中运行它有一些错误。二进制文件是用 'CGO_ENABLED=0' 编译的,go-sqlite3 需要 cgo 才能工作。这
cd /usr/local/go/src CGO_ENABLED=0 GOOS=linux GOARCH=arm ./make.bash # Building C bootstrap tool. cm
我是一名优秀的程序员,十分优秀!