Résolution d'un problème où sqlite3 donnerait une erreur non définie lors de la compilation croisée de Golang

Ce que j'ai essayé de faire

Tentative de compilation croisée de scripts Golang pour s'exécuter sur Amazon Linux

Qu'est-il arrivé

Quand je le construis pour Mac, je peux le construire normalement et cela fonctionne, mais quand je le construis pour Linux, j'obtiens une erreur. Je me suis demandé si les paramètres de compilation croisée pour Linux étaient incorrects, et j'ai découvert que cela ne se produisait qu'avec ** sqlite3 **.

Fonctionne bien pour MacOS

Commande utilisée

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

La construction a réussi et l'opération était normale.

linux n'est pas défini dans sqlite3

Commande utilisée

$ GOOS=linux GOARCH=amd64 go build -o main_for_linux ./main.go

Erreur

# github.com/dinedal/textql/storage
../{Omission}/.go/pkg/mod/github.com/dinedal/textql{Omission}/sqlite.go:30:28: undefined: sqlite3.SQLiteConn
../{Omission}/.go/pkg/mod/github.com/dinedal/textql{Omission}/sqlite.go:49:4: undefined: sqlite3.SQLiteDriver
...

Ce que j'ai trouvé après avoir enquêté:

De nombreux utilisateurs de Mac utilisant go-sqlite3 en étaient dépendants. Problèmes applicables https://github.com/mattn/go-sqlite3/issues/384

** La cause était que l'environnement d'exécution dépendait du système d'exploitation dans la compilation croisée en langage C **. Il semble qu'il soit utilisé dans l'implémentation de sqlite.

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)

La solution

Il y a un problème avec l'environnement de compilation en langage C sur Mac [gcc-4.8.1-for-linux32-linux64](http://crossgcc.rts-software.org/download/gcc-4.8.1-for-linux32- Il est résolu en installant linux64 / gcc-4.8.1-for-linux64.dmg).

procédure

Installez gcc pour Mac

[gcc-4.8.1-pour-linux32-linux64](http://crossgcc.rts-software.org/download/gcc-4.8.1-for-linux32-linux64/gcc-4.8.1-for-linux64. Téléchargez et installez dmg).

Exécuter avec des options

La commande à exécuter est la suivante

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

référence

De nombreuses personnes ont rencontré des problèmes avec le problème ci-dessus, alors une personne gentille a rassemblé les étapes dans un autre numéro.

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


Problème applicable
https://github.com/mattn/go-sqlite3/issues/797 


Recommended Posts

Résolution d'un problème où sqlite3 donnerait une erreur non définie lors de la compilation croisée de Golang
Un problème avec scikit-learn obtenant l'erreur Aucun module nommé'_bz2 '
Résolution du problème selon lequel l'image n'était pas affichée dans ROMol lors du chargement avec PandasTools.LoadSDF.
Notez qu'un problème a été résolu lors de l'introduction de jupyter-notebook.
L'histoire de l'erreur de hachage est apparue lors de l'utilisation de Pipenv
[Linux / GCP] Traitement des erreurs survenues lors de l'utilisation de la commande Git
Lorsqu'une erreur _sqlite3 se produit dans la couverture
Erreur de symbole non définie lors de l'importation de torchvision
[Windows] Le problème qu'une erreur survient lors de l'ouverture d'un fichier autre que CP932 (Shift-JIS) encodé en Python a été résolu pour le moment.