Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk mengabaikan gotvm apabila membina binari ARM64

Bagaimana untuk mengabaikan gotvm apabila membina binari ARM64

PHPz
Lepaskan: 2024-02-05 21:27:07
ke hadapan
560 orang telah melayarinya

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

Kandungan soalan

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
Salin selepas log masuk

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
Salin selepas log masuk

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`
Salin selepas log masuk

Langkah lain yang saya cuba:

  • go clean -modcache
  • Tambahkan bendera binaan berikut package gotvm di atas semua fail kepunyaan
  • (secara individu)
// go:build (darwin && cgo) || (linux && cgo)
//go:build amd64
// +build amd64`
Salin selepas log masuk

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:

  • versi pergi: go1.20.4 linux/amd64
  • Sistem: ubuntu 20.04.5 lts


Jawapan betul


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
Salin selepas log masuk

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
Salin selepas log masuk

go.mod:

module example.com/m

go 1.20
Salin selepas log masuk

gotvm/gotvm.go:

//go:build amd64

package gotvm

import "fmt"

func f() {
    fmt.println("do awesome things using amd64")
}
Salin selepas log masuk

main.go:

package main

import (
    "fmt"

    _ "example.com/m/gotvm"
)

func main() {
    fmt.Println("Hello world!")
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan