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

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

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


我的清单看起来像:


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

这篇文章有几个例子 golang < 1.5。然后在 CoreOS 站点上有这篇入门文章。


一只名叫tom的猫
浏览 257回答 2
2回答

富国沪深

我讨厌回答我自己的问题。评论是正确的,CGO_ENABLED=0 go build ./...似乎已经做到了。虽然它不是原始问题的一部分,但一旦程序开始在 rkt 容器中执行,它就无法执行正确的 DNS 请求。所以一定还有别的事情发生。

温温酱

静态链接:转到 1.5:go&nbsp;build&nbsp;-ldflags&nbsp;"-extldflags&nbsp;-static"&nbsp;...在 Go 1.6 中,我必须使用:go&nbsp;build&nbsp;-ldflags&nbsp;"-linkmode&nbsp;external&nbsp;-extldflags&nbsp;-static"&nbsp;...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go