如何用go 1.5+创建静态链接的golang可执行文件



golang version <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

表示容器中的可执行文件依赖于此库,因此不是静态的。

我的清单看起来像:

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

这篇文章有几个例子。1.5. CoreOS网站上有一篇入门文章

我讨厌回答我自己的问题。评论是正确的,CGO_ENABLED=0 go build ./...似乎已经成功了。

虽然它不是原始问题的一部分,但一旦程序开始在rkt容器中执行,它就不能执行正确的DNS请求。所以一定还有别的原因。

静态链接:

1.5:

go build -ldflags "-extldflags -static" ...

对于Go 1.6,我必须使用:

go build -ldflags "-linkmode external -extldflags -static" ...

尝试建立静态链接版本:

go build -ldflags '-extldflags "-static"' -tags netgo,osusergo .
使用-tags osusergo,netgo强制静态构建,不使用glibc依赖库。

相关内容

  • 没有找到相关文章

最新更新