Tentative de compilation croisée de scripts Golang pour s'exécuter sur Amazon Linux
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 **.
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.
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
...
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)
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).
[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).
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
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