首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么每次重建时我的go二进制都会改变?

为什么每次重建时我的go二进制都会改变?
EN

Stack Overflow用户
提问于 2016-05-12 13:39:54
回答 1查看 208关注 0票数 2

为什么每次在某些项目上重新运行go build ./会产生不同的结果?

例如:

代码语言:javascript
运行
AI代码解释
复制
$ cd go/src/github.com/google/cadvisor
$ go build ./
$ sh1sum cadvisor
cdfc3c38898e2decd5df35b661737f7cc4f514ed  cadvisor
$ go build ./
$ sha1sum cadvisor
a94db96d684225e7a45cc68c5341fe6f57897c23  cadvisor

完全隔离设置:

代码语言:javascript
运行
AI代码解释
复制
$ go version
go version go1.6.2 linux/amd64
$ export GOPATH=$(mktemp -d)
$ cd $GOPATH
$ go get github.com/tools/godep
$ go get github.com/google/cadvisor
package github.com/influxdb/influxdb/client: code in directory /tmp/tmp.2MxFdNmdDe/src/github.com/influxdb/influxdb/client expects import "github.com/influxdata/influxdb/client"
$ cd src/github.com/google/cadvisor
$ $GOPATH/bin/godep restore
godep: WARNING: Go version (go1.6) & $GO15VENDOREXPERIMENT= wants to enable the vendor experiment, but disabling because a Godep workspace (Godeps/_workspace) exists
$ go build ./
...
EN

回答 1

Stack Overflow用户

发布于 2016-05-12 20:48:25

1-这是示例代码,每次构建它时都会改变自己(这也是因为嵌入式__DATE____TIME__在每次构建时都会改变):

代码语言:javascript
运行
AI代码解释
复制
package main

/*
#include<stdint.h>
#include<string.h>
void getCompileDateTime(uint8_t  dt[12],uint8_t tm[9]){
  strcpy(dt, __DATE__); //Mmm dd yyyy
  strcpy(tm, __TIME__);  //hh:mm:ss
}
*/
import "C"
import (
    "fmt"
    "unsafe"
)

func main() {
    dt := make([]byte, 12)
    tm := make([]byte, 10)
    C.getCompileDateTime((*C.uint8_t)(unsafe.Pointer(&dt[0])), (*C.uint8_t)(unsafe.Pointer(&tm[0])))
    dts, tms := string(dt), string(tm)
    fmt.Println(dts, tms)
}

2-

一旦使用cgo,二进制文件将包含矮小部分中的$WORK路径。 当前的问题: 1.CGO中的$WORK路径泄漏。 2. $WORK路径泄漏在-cover中的应用及测试。

参考文献:https://github.com/golang/go/issues/9206

3-多次构建纯Go程序将生成相同的二进制文件。

我希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37197883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档