Heim >Backend-Entwicklung >Golang >So ignorieren Sie gotvm beim Erstellen von ARM64-Binärdateien

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

PHPz
PHPznach vorne
2024-02-05 21:27:07542Durchsuche

如何在构建 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

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
  • 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`

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen