一尘不染

从Mac到Windows的Go / Golang交叉编译:致命错误:找不到“ windows.h”文件

go

摘要 :当我尝试交叉编译.go源文件(包括在文件链中某个位置的C文件),并从Mac主机定位Windows AMD64时,我得到:

/usr/local/go/src/runtime/cgo/gcc_windows_amd64.c:8:10: fatal error: 'windows.h' file not found

纯粹的Go代码似乎可以交叉编译而不会出错;当涉及C文件时,有没有办法获取正确的头文件进行交叉编译?

更多详细信息
:我在Mac上安装了LiteIDE,以用于某些.go项目,而LiteIDE使将其他平台作为构建目标变得相对容易。我纯粹在Go上的一个小型测试项目中对其进行了测试,它似乎没有错误地运行。

后来我在一个更大的当前项目中进行了尝试,并且不得不在IDE中调整一些环境设置才能使其正常工作(关于未启用CGO的C文件的投诉,即使GOPATH在.bash_profile中设置并在echo中进行了验证,GOPATH的设置也不正确$
VARIABLE很好。)结果是

/usr/local/go/src/runtime/cgo/gcc_windows_amd64.c:8:10: fatal error: 'windows.h' file not found

尝试以Linux(os linux,arch amd64)为目标

# runtime/cgo
ld: unknown option: --build-id=none
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已仔细检查是否已安装XCode;gcc已安装:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr with-gxx-include-     dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.29)
Target: x86_64-apple-darwin15.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

…而Go是最新版本:

go version go1.6.2 darwin/amd64

我还检查了这是否仅来自LiteIDE(因为LiteIDE似乎会覆盖环境设置并忽略终端中的内容?);在控制台上进行尝试的示例给出了:

MyUsername$ env GOOS=windows GOARCH=amd64 CGO_ENABLED=1 go build -v
golang.org/x/net/html/atom
runtime/cgo
golang.org/x/crypto/ssh/terminal
golang.org/x/net/html
github.com/howeyc/gopass
# runtime/cgo
/usr/local/go/src/runtime/cgo/gcc_windows_amd64.c:8:10: fatal error: 'windows.h' file not found
github.com/andybalholm/cascadia
github.com/PuerkitoBio/goquery

我怀疑这是因为该应用程序在Go中使用了网络库,而且我认为本机库仍在调用一些C文件来填补空白。有没有一种方法可以获取在Linux /
Windows上构建的正确库,或者是否需要在目标平台上完成才能工作?

在主机平台上构建本机应用程序似乎可以正常工作。


阅读 1467

收藏
2020-07-02

共1个答案

一尘不染

要为CGO启用交叉编译,您需要有一个本地工具链,可以为该目标编译C代码。

我对Mac OS X不太熟悉,但是在Arch Linux上,我要做的就是使用以下命令安装mingw-w64-toolchain并编译go代码:

env GOOS="windows" GOARCH="386"   CGO_ENABLED="1" CC="i686-w64-mingw32-gcc"   go build
// or to target win 64
env GOOS="windows" GOARCH="amd64" CGO_ENABLED="1" CC="x86_64-w64-mingw32-gcc" go build

在OSX上,您可以使用homebrew安装mingw: brew install mingw-w64

但是,关于其他错误消息,ld: unknown option: --build-id=none似乎是一个错误,您可能需要在Go
问题跟踪器中报告该错误消息。

2020-07-02