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

Bart Silverstrim:

摘要:当我尝试交叉编译.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文件的投诉,即使在.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上构建的正确库,或者是否需要在目标平台上完成才能工作?

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

OneOfOne:

要为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 问题跟踪器中报告该错误消息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

错误:使用货物从Windows交叉编译锈项目时,出现“找不到链接器'cc'”

VSTS生成警告:找不到WindowsSDKDir错误:无法打开包含文件:'windows.h'

找不到文件错误 Ray 安装 Windows

错误:2找不到文件-Windows服务

致命错误:在Mac OS X 10.10.5下找不到'common.h'文件

无法为Windows编译PuTTY:致命错误RC1015:无法打开包含文件'winresrc.h'

JNI 从 OS-X 交叉编译到 Windows 失败,“找不到依赖库”

在Windows中编译Go文件?

编译 C 文件时出错。致命错误:找不到“conio.h”文件

系统找不到指定的文件windows错误python

CMake 交叉编译 Windows 到 Windows

致命错误:找不到“ mymodule.h”文件-Cython编译无法找到标头

Rustup:从 Linux 到 Windows i686 的错误交叉编译

Windows 64位的.go文件编译错误

使pycaffe发生致命错误:找不到“ Python.h”文件

pycrypto安装致命错误:找不到gmp.h文件

pycrypto安装致命错误:找不到gmp.h文件

致命错误:找不到“ QuickTime / QuickTime.h”文件

lang ++:致命错误:找不到'unistd.h'文件

在 Windows 上使用 CMake 编译 Tensorflow 失败,找不到文件 version_info.cc

Go是否可以在Ubuntu上交叉编译为Windows可执行文件?

将文件从Mac OS 9复制到Windows 7?

从Windows到Mac的SVN提交将覆盖文件权限

VBScript 找不到 WindowSystemObject 类,错误代码 80020009(Windows 10、20H2)

如何从Windows交叉编译到Linux?

从Windows交叉编译Rust到ARM Linux

从Windows交叉编译到Linux时出错?

无法从Windows到Android交叉编译库

从Linux到Windows交叉编译wxWidgets代码