为了账号安全,请及时绑定邮箱和手机立即绑定

我如何让 `go get` 针对 x86_64 而不是 i386 进行构建

我如何让 `go get` 针对 x86_64 而不是 i386 进行构建

Go
心有法竹 2021-08-30 15:20:58
我正在尝试使用 go-qml 或 gotk3 来构建一个可以在 OS X 下运行的非常简单的桌面应用程序。但是,当我尝试使用go get安装任一库时,它将尝试为 i386 构建并跳过已构建的库针对 x86_64。我可以尝试获取这些库的 32 位版本,但我更愿意为 64 位构建。我如何指示去这样做?错误后的警告看起来是这样的:go get gopkg.in/qml.v1# gopkg.in/qml.v1ld: warning: ld: warning: ld: warning: ignoring file /usr/local/Cellar/qt5/5.3.2/lib/QtWidgets.framework/QtWidgets, file was built for x86_64 which       is not the architecture being linked (i386): /usr/local/Cellar/qt5/5.3.2/lib/QtWidgets.framework/QtWidgetsignoring file /usr/local/Cellar/qt5/5.3.2/lib/QtGui.framework/QtGui, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/Cellar/qt5/5.3.2/lib/QtGui.framework/QtGuiignoring file /usr/local/Cellar/qt5/5.3.2/lib/QtQuick.framework/QtQuick, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/Cellar/qt5/5.3.2/lib/QtQuick.framework/QtQuick
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

将环境变量GOARCH设置为 value amd64。这指示go命令为amd64. 的其他有效值GOARCH386arm


查看完整回答
反对 回复 2021-08-30
?
侃侃无极

TA贡献2051条经验 获得超10个赞

供参考

Go 编译器支持以下指令集:

  • amd64, 386

    • x86 指令集,64 位和 32 位。

  • arm64,手臂

    • ARM 指令集,64 位 (AArch64) 和 32 位。

  • mips64, mips64le, mips, mipsle

    • MIPS 指令集,大端和小端,64 位和 32 位。

  • ppc64, ppc64le

    • 64 位 PowerPC 指令集,大端和小端。

  • RISCV64

    • 64 位 RISC-V 指令集。

  • s390x

    • IBM z/架构。

  • 瓦斯姆

(来自:简介| 从源代码安装 Go | Doc @ golang.org)

此外,您还可以go tool dist list检查可在您的机器中构建的可用架构。

$ go tool dist list

aix/ppc64

android/386

android/amd64

android/arm

android/arm64

darwin/amd64

darwin/arm64

dragonfly/amd64

freebsd/386

(* snip *)

    

为 macOS (Intel/ARM64) 构建静态二进制文件如下。以这种方式,我认为GOOS="darwin" GOARCH="arm64"组合将用于M1建筑。


MyVar="foo"


CGO_ENABLED=0 \

        GOOS="darwin" \

        GOARCH="amd64" \

        GOARM="" \

        go build \

        -ldflags="-s -w -extldflags \"-static\" -X 'main.myVar=${MyVar}'" \

        -o="/path/to/export/bin/myApp" \

        "/path/to/main.go"

要在 ARM v6 上编译 Linux,例如 RaspberryPi Zero W,组合如下。


$ CGO_ENABLED=0 GOOS="linux" GOARCH="arm" GOARM="6" go build .


查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信