2016-04-28 14 views
0

Zusammenfassung: Wenn ich versuche, eine .go-Quelldatei zu kompilieren, die eine C-Datei irgendwo in der Dateikette enthält , Targeting Windows AMD64 von einem Mac-Host, bekomme ich:Go/Golang Kreuzkompilieren von Mac nach Windows: Schwerwiegender Fehler: Datei 'windows.h' nicht gefunden

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

Rein Go-Code scheint ohne Fehler zu kompilieren; Gibt es eine Möglichkeit, die richtigen Header-Dateien für die Cross-Compilierung zu bekommen, wenn C-Dateien beteiligt sind?

Weitere Details: Ich habe LiteIDE auf meinem Mac installiert, um an einigen .go-Projekten zu arbeiten, und LiteIDE macht es relativ einfach, andere Plattformen als Build-Ziele anzusprechen. Ich testete es an einem kleinen Testprojekt, das ich hatte, rein Go, und es schien ohne Fehler zu laufen.

Später habe ich es in einem aktuellen, größeren Projekt ausprobiert und musste mehrere env-Einstellungen in der IDE anpassen, um es zum Laufen zu bringen (Beschwerden über C-Dateien ohne CGO aktiviert und GOPATH nicht richtig gesetzt, obwohl es in .bash_profile eingestellt ist und in echo $ VARIABLE prüft just fine) Das Ergebnis ist

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

Der Versuch, Linux zu zielen (os Linux, Bogen amd64) gibt

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

ich habe doppelt geprüft ich habe XCode installiert. gcc installiert ist:

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 

... and Go ist die neueste Version:

go version go1.6.2 darwin/amd64 

Ich habe auch, dass diese von LiteIDE nicht nur (da LiteIDE scheint env-Einstellungen außer Kraft zu setzen und ignorieren, was im Terminal?); ein Beispiel Versuch an der Konsole gibt:

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 

Ich vermute, das liegt daran, dass die Anwendung Networking Bibliotheken in Go verwendet und ich denke, dass die nativen Bibliotheken einiger C-Dateien immer noch fordern in Lücken zu füllen. Gibt es eine Möglichkeit, die richtigen Bibliotheken für den Aufbau auf Linux/Windows zu bekommen oder muss dies auf den Zielplattformen gemacht werden, um zu funktionieren?

Das Erstellen nativer Anwendungen auf der Host-Plattform scheint problemlos zu funktionieren.

+0

Ihre Klirren scheint eher veraltet (Sie don habe tatsaechlich gcc btw, es ' s Klänge). – OneOfOne

+0

@OneOfOne Wenn ich den App Store überprüfe, scheint es der neueste verfügbare Xcode zu sein? (Enthält Xcode keinen Compiler?) –

+0

Ich bin mir bei Xcode-Versionen nicht 100% ig sicher, aber wenn Sie Ihre gcc-Version ansehen, steht 4.2.1, die extrem veraltet ist, aber unabhängig davon, müssen Sie eine Toolchain installieren, die nativen C-Code für Windows und/oder Linux kompilieren kann. Wenn alles fehlschlägt, sollten Sie sich die Einrichtung einer VM für Linux und Windows ansehen. – OneOfOne

Antwort

6

Um Cross-Compiling für CGO zu ermöglichen, benötigen Sie eine lokale Toolchain, die C-Code für dieses Ziel kompilieren kann.

Ich bin nicht sehr vertraut mit Mac OS X, aber auf Arch Linux alles, was ich tun musste, war mingw-w64-toolchain zu installieren und mein gehen Code kompilieren mit:

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 

So möchten Sie vielleicht prüfen, wie zu mingw (oder so ähnlich gehen auf OS X.

Über die anderen Fehlermeldung jedoch ld: unknown option: --build-id=none wie ein Bug scheint, möchten Sie vielleicht, dass issue tracker auf dem Gehen melden.