1. 问题

 apk add --no-cache sqlite-libs sqlite-dev
 CGO_ENABLED=1 go build -ldflags "-s -w" -o perception_node ./cmd/

2. 解决

如何解决:

  1. 使用 golang 的 kafka 库:开发人员需要更改代码以切换使用的 kafka sdk。这可以作为替代方案。
  2. 降低 golang:latest 的 glibc 版本:发行版通常修复 glibc 以编译其他工具链,替换 glibc 是不明智的。虽然有这样的工具yum downgrade glibc*可以帮助解决这个问题。
  3. 更改为旧的 glibc 映像:同样,您无法避免一堆旧的 bash 脚本。
  4. 静态链接 c 依赖项

综上所述,使用最新的镜像来编译,但是会依赖所有的静态链接,这样一编译完成后就不用担心c库兼容的问题, 如果使用 glibc,则它不是静态可链接的。

因为 glibc 依赖于支持不同提供程序的 libnss,所以它必须动态链接。

$  docker run -it -v $(pwd):/workspace  golang:1.18-alpine
/go $ cd /workspace/
/workspace $ sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && 
>     apk add git openssh make build-base alpine-sdk
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/37) Installing fakeroot (1.25.3-r3)
(2/37) Installing openssl (1.1.1l-r0)
(3/37) Installing libattr (2.5.1-r0)
(4/37) Installing attr (2.5.1-r0)
(5/37) Installing libacl (2.2.53-r0)
(6/37) Installing tar (1.34-r0)
(7/37) Installing pkgconf (1.7.4-r0)
...
$ export GOPROXY="https://goproxy.cn"
/workspace $ go build -ldflags "-linkmode external -extldflags '-static'" -tags musl -o  perception_node ./cmd/
/workspace $ ldd  perception_node
/lib/ld-musl-x86_64.so.1: spex: Not a valid dynamic program
$ docker run -it -v $(pwd):/workspace  golang:1.18-alpine
/go $ cd /workspace/
/workspace $ sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 
$ apk add openssh make build-base alpine-sdk mingw-w64-gcc musl-dev gcc build-base
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/37) Installing fakeroot (1.25.3-r3)
(2/37) Installing openssl (1.1.1l-r0)
(3/37) Installing libattr (2.5.1-r0)
(4/37) Installing attr (2.5.1-r0)
(5/37) Installing libacl (2.2.53-r0)
(6/37) Installing tar (1.34-r0)
(7/37) Installing pkgconf (1.7.4-r0)
...
$ export GOPROXY="https://goproxy.cn"
$ CGO_ENABLED=1 GOOS=windows CC=x86_64-w64-mingw32-gcc go build -ldflags "-linkmode external -extldflags '-static'"  -tags musl -o seduce_node_agent.exe main.go

参考

内容来源于网络如有侵权请私信删除

文章来源: 博客园

标签: GO GO语言 GOLANG
你还没有登录,请先登录或注册!
  • 还没有人评论,欢迎说说您的想法!

相关课程

4151 9.8元 98元 1折
3220 0元 限免
5035 0元 9.8元 限免