首頁  >  文章  >  後端開發  >  如何在建置 ARM64 二進位檔案時忽略gotvm

如何在建置 ARM64 二進位檔案時忽略gotvm

PHPz
PHPz轉載
2024-02-05 21:27:07454瀏覽

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

問題內容

我想建立我的go 儲存庫,以便在goarch=arm64 時忽略myrepo/ gotvm/* 並在任何其他情況下建立完整的儲存庫。

專案資料夾結構如下:

└── myrepo
    ├── go.mod
    ├── main.go
    ├── gotvm
    │   ├── array.go
    │   ├── device.go
    │   └── gotvm.go
    └── otherstuff
        └── otherstuff.go

在 amd64 上建置時一切正常:

goos=linux goarch=amd64 go build -o amdbuild main.go

基於 arm64 建置

#goos=linux goarch=arm64 go build -o armbuild main.go

# 在不建立二進位檔案之前出現以下錯誤:

package command-line-arguments
    imports github.com/myrepo/gotvm: build constraints exclude all go files in /homedir/myrepo/gotvm

當我使用package gotvm (array.go, device.go, gotvm.go) 將以下行加入每個文件的頂部時,情況也是如此:

//go:build amd64
// +build amd64`

我嘗試過的其他步驟:

  • go clean -modcache
  • 在屬於 package gotvm 的所有檔案上方(單獨)新增以下建置標誌
// go:build (darwin && cgo) || (linux && cgo)
//go:build amd64
// +build amd64`

這裡有一個類似的問題:(模擬套件) ,但這會忽略整個資料夾。我想忽略以 arch 不是 arm64 為條件的資料夾。

tl;dr; 有沒有辦法將我的儲存庫交叉編譯為 arm64 和 amd64?我想在 arm64 建置中忽略 tvm。

規格:

  • go版本:go1.20.4 linux/amd64
  • #系統:ubuntu 20.04.5 lts

正確答案


將僅包含 package 子句的 go 檔案新增至 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

但是當你遇到這個問題時,大多數時候,這意味著至少有一個檔案導入了這個包,並且goarch=arm64不排除這個檔案。也許您應該從此文件中刪除導入(或者對於 goarch=arm64 也排除此文件)。

我將新增一個示範來說明問題。這些是文件:

├── 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!")
}

對於此演示,從main.go 中刪除_ "example.com/m/gotvm" 或新增前面提到的doc.go文件即可解決該問題。我認為,最好從 main.go 中刪除 _ "example.com/m/gotvm"

以上是如何在建置 ARM64 二進位檔案時忽略gotvm的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除