我想构建我的 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的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何在 Java 中对幂函数的性能进行优化?(如何在Java中优化幂函数的性能)
- 如何编写 Java 获取文件行数的代码?(Java获取文件行数的代码怎么写)
- Java 中 == 和 equals 的区别究竟有哪些?(java中==和equals的区别是什么)
- Java 如何读取外部配置文件?(详细教程及 SEO 优化指南)(java怎么读取外部配置文件)
- 如何使用 Java 将文件移动到指定文件夹?(怎么用java移动文件到指定文件夹)
- 在 Java 中,for 循环究竟有哪些特点呢?(java中for循环的特点是什么)
- Java 中 write 方法的详细使用指南及示例解析(java中write方法如何使用)
- 如何使用 Java 遍历 Map 集合以获取值?(java怎么遍历map集合获取值)
- 如何实现 Java 数组的倒序输出?(java数组倒序输出的方法是什么)
- 如何实施 Java Room 的版本控制?(Java Room的版本控制如何实施)