Golang 1.12.3 和 1.11.8 版本正式发布

Golang 1.12.3 和 1.11.8 版本正式发布 大家好,

我们刚刚发布了 Go 1.12.3 和 1.11.8 版本,这是两个小版本更新。

这些版本修复了在旧版 GNU/Linux 系统上使用预编译二进制发行版时,导致使用 cgo 的程序链接失败的问题。

只有遇到此问题的 Linux 用户需要更新。

查看发布说明以获取更多信息:

https://golang.org/doc/devel/release.html#go1.12.minor

您可以从 Go 网站下载二进制和源代码发行版:

https://golang.org/dl/

要通过 Git 克隆从源代码编译,请使用以下命令更新到该版本:

git checkout go1.12.3

并照常构建。

致意,

Go 团队 Andy


更多关于Golang 1.12.3 和 1.11.8 版本正式发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang 1.12.3 和 1.11.8 版本正式发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go 1.12.3 和 1.11.8 的发布主要解决了在旧版 GNU/Linux 系统上使用预编译二进制发行版时,cgo 程序链接失败的问题。这个问题源于 glibc 版本兼容性,具体表现为动态链接器无法解析某些符号。以下是一个示例,展示在修复前可能出现的错误场景:

假设在旧版 Linux 系统(如使用 glibc 2.17)上运行一个使用 cgo 的 Go 程序,编译时可能遇到类似错误:

// 示例代码:main.go
package main

/*
#include <stdio.h>
void hello() {
    printf("Hello from C!\n");
}
*/
import "C"

func main() {
    C.hello()
}

在 Go 1.12.2 或更早版本中,使用预编译二进制发行版编译此代码时,可能会报错:

/usr/bin/ld: cannot find -lc

或类似链接器错误,因为预编译二进制与系统 glibc 不兼容。

现在,在 Go 1.12.3 或 1.11.8 中,这个问题已修复。您可以直接下载新版本并重新编译:

# 下载并安装 Go 1.12.3
wget https://golang.org/dl/go1.12.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.12.3.linux-amd64.tar.gz
export PATH=/usr/local/go/bin:$PATH

# 编译示例程序
go build main.go
./main

输出应为:

Hello from C!

这表明 cgo 链接成功。如果您之前遇到此问题,更新到这些版本即可解决。对于未受影响的用户,无需立即升级。

回到顶部