[LINUX] Es wurde ein Problem behoben, bei dem sqlite3 beim Cross-Kompilieren von Golang einen undefinierten Fehler verursachte

Was ich versucht habe zu tun

Es wurde versucht, Golang-Skripte für die Ausführung unter Amazon Linux zu kompilieren

Was ist passiert

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.

Funktioniert gut für MacOS

Befehl verwendet

$ GOOS=darwin GOARCH=amd64 go build -o main_for_mac ./main.go

Der Build war erfolgreich und der Betrieb war normal.

Linux ist in sqlite3 undefiniert

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
...

Was ich nach der Untersuchung gefunden habe:

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)

Die Lösung

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.

Verfahren

Installieren Sie gcc für Mac

[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.

Mit Optionen ausführen

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

Referenz

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

Es wurde ein Problem behoben, bei dem sqlite3 beim Cross-Kompilieren von Golang einen undefinierten Fehler verursachte
Ein Problem mit scikit-learn, das den Fehler erhält Kein Modul mit dem Namen'_bz2 '
Das Problem, dass das Bild beim Laden mit PandasTools.LoadSDF nicht in ROMol angezeigt wurde, wurde behoben.
Beachten Sie, dass ein Problem behoben wurde, als das Jupyter-Notebook eingeführt wurde.
Die Geschichte, dass ein Hash-Fehler bei der Verwendung von Pipenv auftrat
[Linux / GCP] Umgang mit Fehlern, die bei Verwendung des Git-Befehls aufgetreten sind
Wenn ein _sqlite3-Fehler in der Abdeckung auftritt
Undefinierter Symbolfehler beim Importieren von Torchvision
[Windows] Das Problem, dass beim Öffnen einer anderen als CP932 (Shift-JIS) in Python codierten Datei ein Fehler auftritt, wurde vorerst behoben.