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

atmip9wb  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(146)

我正在尝试使用go-qml或gotk 3来构建一个可以在OSX下运行的非常简单的桌面应用程序。但是,当我尝试使用go get安装任何一个库时,它将尝试为i386构建,并跳过针对x86_64构建的库。我可以尝试获得这些库的32位版本,但我更喜欢为64位构建。我该如何指导你去做呢?
后面跟着错误的警告看起来是这样的:

go get gopkg.in/qml.v1
# gopkg.in/qml.v1
ld: 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
gzszwxb4

gzszwxb41#

将环境变量GOARCH设置为值amd64。这将指示go命令为amd64生成文件。GOARCH的其他有效值包括386armarm64等。

idv4meu8

idv4meu82#

仅供参考

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

  • amd64,386
  • x86指令集,64位和32位。
  • 臂64,臂
  • ARM指令集,64位(AArch 64)和32位。
  • mips64,mips64le,mips,mipsle
  • MIPS指令集,大端和小端,64位和32位。
  • ppc64,ppc64le
  • 64位PowerPC指令集,大端和小端。
  • riscv64
  • RISC-V指令集。
  • s390x
  • IBM z/Architecture。
  • WASM
  • WebAssembly

(from:导言|从源代码安装Go| 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/ARM 64)构建一个静态二进制文件如下所示。在这种方式下,我假设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 .

相关问题