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.
Ihre Klirren scheint eher veraltet (Sie don habe tatsaechlich gcc btw, es ' s Klänge). – OneOfOne
@OneOfOne Wenn ich den App Store überprüfe, scheint es der neueste verfügbare Xcode zu sein? (Enthält Xcode keinen Compiler?) –
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