Avatar ·

Wie führe ich Cross-Kompilierung eines Go-Programms auf macOS durch?

Hallo zusammen! Ich schreibe Go unter macOS und möchte eine Binary für Linux und Windows erstellen, um sie auf dem Server auszuführen und Kollegen zu geben. Ich habe versucht, einfach `go build` auszuführen, aber es erstellt nur eine ausführbare Datei für macOS. Ich habe gelesen, dass Go integrierte Unterstützung für Cross-Kompilierung hat, aber ich kann nicht herausfinden, wie ich es richtig mache. Hier ist mein einfacher Code (Datei main.go): ```go package main import "fmt" func main() { fmt.Println("Hello, cross-compilation!") } ``` Ich habe versucht: ```bash GOOS=linux GOARCH=amd64 go build main.go ``` Aber ich habe einen Fehler erhalten: `cannot find package "main" in any of: ...` oder eine Binary, die unter Linux nicht läuft. Was mache ich falsch? Muss ich zusätzliche Tools wie für CGo installieren? Ich habe macOS Big Sur, Go Version 1.21. Ich wäre dankbar für eine Schritt-für-Schritt-Erklärung für Anfänger. <<>>

Schritt-für-Schritt-Lösung für Cross-Kompilierung in Go auf macOS

Sie sind auf dem richtigen Weg! Go hat tatsächlich integrierte Unterstützung für Cross-Kompilierung. Der Befehl `GOOS=linux GOARCH=amd64 go build main.go` ist grundsätzlich korrekt, aber es gibt einige häufige Fallstricke. Stellen Sie sicher, dass Sie im richtigen Verzeichnis sind (wo main.go liegt) und dass Ihr Modul korrekt initialisiert ist (z.B. mit `go mod init meinmodul`). Der Fehler "cannot find package" tritt oft auf, wenn Sie nicht im Modulverzeichnis sind oder wenn Sie `go build` ohne Angabe der Datei ausführen. Versuchen Sie stattdessen `GOOS=linux GOARCH=amd64 go build -o meinprogramm .` (mit Punkt für das aktuelle Paket). Für einfache Programme ohne C-Abhängigkeiten benötigen Sie keine zusätzlichen Tools. Wenn Sie CGo verwenden, müssen Sie `CGO_ENABLED=0` setzen. Ihr Code sollte ohne Probleme funktionieren. Überprüfen Sie nach dem Build die Binary mit `file meinprogramm` unter Linux, um sicherzustellen, dass es eine ELF-Datei ist.