Es wurde versucht, Golang-Skripte für die Ausführung unter Amazon Linux zu kompilieren
Wenn ich es für Mac baue, kann ich es normal bauen und es funktioniert, aber wenn ich es für Linux baue, wird eine Fehlermeldung angezeigt. Ich fragte mich, ob die Cross-Compilation-Einstellung für Linux falsch war und fand heraus, dass es anders war, und es scheint, dass es nur mit ** sqlite3 ** passiert.
Befehl verwendet
$ GOOS=darwin GOARCH=amd64 go build -o main_for_mac ./main.go
Der Build war erfolgreich und der Betrieb war normal.
Befehl verwendet
$ GOOS=linux GOARCH=amd64 go build -o main_for_linux ./main.go
Error
# github.com/dinedal/textql/storage
../{Unterlassung}/.go/pkg/mod/github.com/dinedal/textql{Unterlassung}/sqlite.go:30:28: undefined: sqlite3.SQLiteConn
../{Unterlassung}/.go/pkg/mod/github.com/dinedal/textql{Unterlassung}/sqlite.go:49:4: undefined: sqlite3.SQLiteDriver
...
Viele Mac-Benutzer, die go-sqlite3 verwenden, waren davon abhängig. Anwendbare Probleme https://github.com/mattn/go-sqlite3/issues/384
** Die Ursache war, dass die Ausführungsumgebung bei der Cross-Kompilierung in C-Sprache vom Betriebssystem abhängig war **. Es scheint, dass es bei der Implementierung von SQLite verwendet wird.
Cross-compiling C code (and by extension, cgo code) is tricky because the choice of C compiler depends on both the OS (Windows/Linux/Mac) and architecture (x86, x64, arm) of both the host and target. On top of that, there are multiple flavors of compilers for a given combination. I don't think listing all of them is feasible. But I do think it would be helpful to more thoroughly explain what a cross-compiler is and why it is needed, and list out some of the more common options. It would also be helpful to mention using docker as a means of "cross-compiling" (at least when targeting Linux)
Es gibt ein Problem mit der C-Sprachkompilierungsumgebung unter Mac [gcc-4.8.1-for-linux32-linux64](http://crossgcc.rts-software.org/download/gcc-4.8.1-for-linux32- Es wird durch die Installation von linux64 / gcc-4.8.1-for-linux64.dmg gelöst.
[gcc-4.8.1-for-linux32-linux64](http://crossgcc.rts-software.org/download/gcc-4.8.1-for-linux32-linux64/gcc-4.8.1-for-linux64. Laden Sie dmg herunter und installieren Sie es.
Der auszuführende Befehl lautet wie folgt
build as usual env GOOS=linux GOARCH=amd64 CGO_ENABLED=1 CC=/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc go build
Viele Menschen hatten Probleme mit dem oben genannten Problem, daher hat eine freundliche Person die Schritte in einem anderen Problem zusammengefasst.
install [http://crossgcc.rts-software.org/download/gcc-4.8.1-for-linux32-linux64/gcc-4.8.1-for-linux64.dmg]gcc-4.8.1-for-linux32-linux64 build as usual env GOOS=linux GOARCH=amd64 CGO_ENABLED=1 CC=/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc go build
Anwendbares Problem
https://github.com/mattn/go-sqlite3/issues/797
Recommended Posts