亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么每次重建時我的 go 二進制文件都會發生變化?

為什么每次重建時我的 go 二進制文件都會發生變化?

Go
慕無忌1623718 2022-01-10 15:14:39
為什么go build ./每次重新運行某些項目會產生不同的結果?例如:$ cd go/src/github.com/google/cadvisor$ go build ./$ sh1sum cadvisorcdfc3c38898e2decd5df35b661737f7cc4f514ed  cadvisor$ go build ./$ sha1sum cadvisora94db96d684225e7a45cc68c5341fe6f57897c23  cadvisor完全隔離設置:$ go versiongo version go1.6.2 linux/amd64$ export GOPATH=$(mktemp -d)$ cd $GOPATH$ go get github.com/tools/godep$ go get github.com/google/cadvisorpackage 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 restoregodep: WARNING: Go version (go1.6) & $GO15VENDOREXPERIMENT= wants to enable the vendor experiment, but disabling because a Godep workspace (Godeps/_workspace) exists$ go build ./...
查看完整描述

2 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

這是因為您使用的是 CGO,Go 創建了一個用于編譯 C 代碼的 tmp 目錄,并且該路徑嵌入到二進制文件中。



查看完整回答
反對 回復 2022-01-10
?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

1-這是示例代碼,每次構建時都會自行更改(也因為嵌入__DATE__并且__TIME__每次構建時都會更改):


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,二進制文件將在 DWARF 部分中包含 $WORK 路徑

當前問題:

1. cgo 構建中的 $WORK 路徑泄漏。

2. -cover 和測試中的 $WORK 路徑泄漏。


參考:https : //github.com/golang/go/issues/9206


3- 多次構建純 Go 程序將生成相同的二進制文件。


我希望這有幫助。


查看完整回答
反對 回復 2022-01-10
  • 2 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號