Heim >Backend-Entwicklung >Golang >So ignorieren Sie gotvm beim Erstellen von ARM64-Binärdateien
Ich möchte mein Go-Repository erstellen, um ein vollständiges Repository in goarch=arm64
时忽略 myrepo/gotvm/*
und in jedem anderen Fall zu erstellen.
Die Projektordnerstruktur ist wie folgt:
└── myrepo ├── go.mod ├── main.go ├── gotvm │ ├── array.go │ ├── device.go │ └── gotvm.go └── otherstuff └── otherstuff.go
Beim Aufbau auf amd64 funktioniert alles einwandfrei:
goos=linux goarch=amd64 go build -o amdbuild main.go
Basierend auf arm64 gebaut
goos=linux goarch=arm64 go build -o armbuild main.go
Der folgende Fehler tritt auf, bevor die Binärdatei nicht erstellt wird:
package command-line-arguments imports github.com/myrepo/gotvm: build constraints exclude all go files in /homedir/myrepo/gotvm
Das Gleiche gilt, wenn ich am Anfang jeder Datei mit package gotvm
(array.go
, device.go
, gotvm.go
die folgende Zeile hinzufüge:
//go:build amd64 // +build amd64`
Andere Schritte, die ich versucht habe:
go clean -modcache
package gotvm
über allen Dateien hinzu, die zu // go:build (darwin && cgo) || (linux && cgo) //go:build amd64 // +build amd64`
Hier gibt es eine ähnliche Frage: (Simulationspaket)
, aber dadurch wird der gesamte Ordner ignoriert. Ich möchte Ordner mit arch
不是 arm64
als Bedingung ignorieren.
tl;dr; Gibt es eine Möglichkeit, mein Repository auf arm64 und amd64 zu kompilieren? Ich möchte tvm im arm64-Build ignorieren.
Spezifikationen:
go1.20.4 linux/amd64
Fügen Sie die go-Datei, die nur die Paketklausel enthält, zur gotvm
文件夹中可以解决此问题。例如,doc.go
-Datei hinzu:
// 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
Aber wenn Sie auf dieses Problem stoßen, bedeutet das meistens, dass es mindestens eine Datei gibt, die dieses Paket importiert, und goarch=arm64
不排除这个文件。也许您应该从此文件中删除导入(或者对于 goarch=arm64
diese Datei auch ausschließen.
Ich werde eine Demo hinzufügen, um das Problem zu veranschaulichen. Das sind die Dateien:
├── 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!") }
Für diese Demo beginnen Sie mit main.go
中删除 _ "example.com/m/gotvm"
或添加前面提到的 doc.go
文件即可解决该问题。我认为,最好从 main.go
中删除 _ "example.com/m/gotvm"
.
Das obige ist der detaillierte Inhalt vonSo ignorieren Sie gotvm beim Erstellen von ARM64-Binärdateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!