So ignorieren Sie gotvm beim Erstellen von ARM64-Binärdateien

PHPz
Freigeben: 2024-02-05 21:27:07
nach vorne
499 Leute haben es durchsucht

如何在构建 ARM64 二进制文件时忽略gotvm

Frageninhalt

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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`
Nach dem Login kopieren

Andere Schritte, die ich versucht habe:

  • go clean -modcache
  • Fügen Sie die folgenden Build-Flags package gotvm über allen Dateien hinzu, die zu
  • gehören (einzeln)
// go:build (darwin && cgo) || (linux && cgo)
//go:build amd64
// +build amd64`
Nach dem Login kopieren

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:

  • go-Version: go1.20.4 linux/amd64
  • System: Ubuntu 20.04.5 lts


Richtige Antwort


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
Nach dem Login kopieren

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
Nach dem Login kopieren

go.mod:

module example.com/m

go 1.20
Nach dem Login kopieren

gotvm/gotvm.go:

//go:build amd64

package gotvm

import "fmt"

func f() {
    fmt.println("do awesome things using amd64")
}
Nach dem Login kopieren

main.go:

package main

import (
    "fmt"

    _ "example.com/m/gotvm"
)

func main() {
    fmt.Println("Hello world!")
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage