编译的命令如下:
1 | docker run --rm -it -v $(pwd):$(pwd) -w $(pwd) -e GOPROXY=https://goproxy.cn golang:1.14.4-alpine3.12 go build main.go |
执行:
1 | no such file or directory: ./main |
这个时候就很懵了,因为这个main文件是有可执行权限的。所以,这个file一定就不是指main文件了。分析后,猜测是它依赖的动态链接库不存在:
1 | ldd main |
果然,发现musl库不存在。alpine默认用的是musl库,并且,go编译的时候,默认会开启CGO,这个时候就会用到libc之类的库。所以,这里我们可以暂时关闭CGO,让编译通过:
1 | docker run --rm -it -v $(pwd):$(pwd) -w $(pwd) -e CGO_ENABLED=0 -e GOPROXY=https://goproxy.cn golang:1.14.4-alpine3.12 go build main.go |
当然,我们最好还是用和本机系统一样的docker环境来进行编译,这样,就可以正确的链接C库了。