golang版< 1.5 - 有很多静态链接示例,帖子和食谱。怎么样> = 1.5? (谷歌搜索没有为我的搜索条件返回任何有用的结果。)任何人都有关于如何生成可以在基本rkt(来自CoreOS)容器内执行的静态链接二进制文件的任何建议吗?
我的去:
$go version
go version go1.5 linux/amd64
当我尝试运行我的容器时:
sudo rkt --insecure-skip-verify run /tmp/FastBonusReport.aci
我明白了:
[38049.477658] FastBonusReport[4]: Error: Unable to open "/lib64/ld-linux-x86-64.so.2": No such file or directory
建议容器中的可执行文件依赖于此lib,因此不是静态的。
我的清单看起来像:
cat <<EOF > /tmp/${myapp}/manifest
{
"acKind": "ImageManifest",
"acVersion": "0.9.0",
"name": "${lowermyapp}",
"labels": [
{"name": "os", "value": "linux"},
{"name": "arch", "value": "amd64"}
],
"app": {
"exec": [
"/bin/${myapp}"
],
"user": "0",
"group": "0"
}
}
EOF
构建二进制文件的命令行如下:
go build ${myapp}.go
这个article有几个例子golang&lt; 1.5。然后在CoreOS站点上有这篇getting started文章。
答案 0 :(得分:11)
我不想回答我自己的问题。评论是正确的CGO_ENABLED=0 go build ./...
似乎已经成功了。
虽然它不是原始问题的一部分,但一旦程序开始在rkt容器中执行,它就无法执行正确的DNS请求。所以一定有其他事情发生。
答案 1 :(得分:5)
静态链接:
去1.5:
go build -ldflags "-extldflags -static" ...
使用Go 1.6,我不得不使用:
go build -ldflags "-linkmode external -extldflags -static" ...