我想建立我的go 儲存庫,以便在goarch=arm64
時忽略myrepo/ gotvm/*
並在任何其他情況下建立完整的儲存庫。
專案資料夾結構如下:
└── myrepo ├── go.mod ├── main.go ├── gotvm │ ├── array.go │ ├── device.go │ └── gotvm.go └── otherstuff └── otherstuff.go
在 amd64 上建置時一切正常:
goos=linux goarch=amd64 go build -o amdbuild main.go
基於 arm64 建置
#goos=linux goarch=arm64 go build -o armbuild main.go
# 在不建立二進位檔案之前出現以下錯誤:
package command-line-arguments imports github.com/myrepo/gotvm: build constraints exclude all go files in /homedir/myrepo/gotvm
當我使用package gotvm
(array.go
, device.go
, gotvm.go
) 將以下行加入每個文件的頂部時,情況也是如此:
//go:build amd64 // +build amd64`
我嘗試過的其他步驟:
go clean -modcache
package gotvm
的所有檔案上方(單獨)新增以下建置標誌// go:build (darwin && cgo) || (linux && cgo) //go:build amd64 // +build amd64`
這裡有一個類似的問題:(模擬套件)
,但這會忽略整個資料夾。我想忽略以 arch
不是 arm64
為條件的資料夾。
tl;dr; 有沒有辦法將我的儲存庫交叉編譯為 arm64 和 amd64?我想在 arm64 建置中忽略 tvm。
規格:
go1.20.4 linux/amd64
將僅包含 package 子句的 go 檔案新增至 gotvm
資料夾中可以解決此問題。例如,doc.go
檔案:
// this file is a workaround for the following issue when built with goarch=arm64: // // build constraints exclude all go files in /homedir/myrepo/gotvm package gotvm
但是當你遇到這個問題時,大多數時候,這意味著至少有一個檔案導入了這個包,並且goarch=arm64
不排除這個檔案。也許您應該從此文件中刪除導入(或者對於 goarch=arm64
也排除此文件)。
我將新增一個示範來說明問題。這些是文件:
├── go.mod ├── gotvm │ └── gotvm.go └── main.go
go.mod:
module example.com/m go 1.20
gotvm/gotvm.go:
//go:build amd64 package gotvm import "fmt" func f() { fmt.println("do awesome things using amd64") }
main.go:
package main import ( "fmt" _ "example.com/m/gotvm" ) func main() { fmt.Println("Hello world!") }
對於此演示,從main.go
中刪除_ "example.com/m/gotvm"
或新增前面提到的doc.go
文件即可解決該問題。我認為,最好從 main.go
中刪除 _ "example.com/m/gotvm"
。
以上是如何在建置 ARM64 二進位檔案時忽略gotvm的詳細內容。更多資訊請關注PHP中文網其他相關文章!