Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk mengabaikan gotvm apabila membina binari ARM64
Saya ingin membina repositori go saya untuk membina repositori lengkap dalam goarch=arm64
时忽略 myrepo/gotvm/*
dan dalam sebarang kes lain.
Struktur folder projek adalah seperti berikut:
└── myrepo ├── go.mod ├── main.go ├── gotvm │ ├── array.go │ ├── device.go │ └── gotvm.go └── otherstuff └── otherstuff.go
Semuanya berfungsi dengan baik apabila membina pada amd64:
goos=linux goarch=amd64 go build -o amdbuild main.go
Dibina berdasarkan arm64
goos=linux goarch=arm64 go build -o armbuild main.go
Ralat berikut berlaku sebelum binari tidak dicipta:
package command-line-arguments imports github.com/myrepo/gotvm: build constraints exclude all go files in /homedir/myrepo/gotvm
Begitu juga apabila saya menambah baris berikut pada bahagian atas setiap fail menggunakan package gotvm
(array.go
, device.go
, gotvm.go
):
//go:build amd64 // +build amd64`
Langkah lain yang saya cuba:
go clean -modcache
package gotvm
di atas semua fail kepunyaan // go:build (darwin && cgo) || (linux && cgo) //go:build amd64 // +build amd64`
Ada soalan yang sama di sini: (pakej simulasi)
, tetapi ini mengabaikan keseluruhan folder. Saya mahu mengabaikan folder dengan arch
不是 arm64
sebagai syarat.
tl;dr; Adakah terdapat cara untuk menyusun semula repositori saya ke arm64 dan amd64? Saya mahu mengabaikan tvm dalam binaan arm64.
Spesifikasi:
go1.20.4 linux/amd64
Tambahkan fail go yang mengandungi hanya klausa pakej pada fail 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
Tetapi apabila anda menghadapi masalah ini, kebanyakan masa, ini bermakna terdapat sekurang-kurangnya satu fail yang mengimport pakej ini, dan goarch=arm64
不排除这个文件。也许您应该从此文件中删除导入(或者对于 goarch=arm64
kecualikan fail ini juga).
Saya akan menambah demo untuk menggambarkan masalah. Ini adalah fail:
├── 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!") }
Untuk demo ini, mulakan dengan main.go
中删除 _ "example.com/m/gotvm"
或添加前面提到的 doc.go
文件即可解决该问题。我认为,最好从 main.go
中删除 _ "example.com/m/gotvm"
.
Atas ialah kandungan terperinci Bagaimana untuk mengabaikan gotvm apabila membina binari ARM64. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!