1
votes

golang binaire ne fonctionne pas sur mips

J'utilise Go 1.11.4 sous Windows 10 et je souhaite compiler du code pour un processeur MIPS 74Kc (Qualcomm Atheros QCA9558) sous Linux. Je compile avec:

GOOS = linux GOARCH = mips go build

Obtenez un exécutable, téléchargez-le et exécutez-le et obtenez:

Instruction illégale

Réessayez avec GOARCH = mipsle et obtenez:

./hello_mipsle_linux: ligne 1: erreur de syntaxe: inattendue "("

Que me manque-t-il?


2 commentaires

Nous sommes capables de résoudre ça? J'ai un problème similaire


Oui. Voir ma réponse ci-dessous. Ajoutez simplement GOMIPS = softfloat .


3 Réponses :


1
votes

Pour lister tous les architectes MIPS possibles disponibles pour votre chaîne d'outils de construction actuelle, utilisez go tool par exemple

$ go version

go version go1.12 darwin/amd64

$ go tool dist list | grep mips

linux/mips
linux/mips64
linux/mips64le
linux/mipsle

donc probablement l'un des GOARCH permutations que vous n'avez pas essayées par exemple mips64 ou mips64le.

uname -m aiderait à déterminer l'architecture de la machine de votre système cible.


0 commentaires

2
votes

Mon hôte effectuant la compilation avait un FPU, mais pas la carte. L'ajout de GOMIPS = softfloat l'a corrigé:

GOOS = linux GOARCH = mips GOMIPS = softfloat go build


1 commentaires

Pour info: ces binaires MIPS fonctionnent également sur les points d'accès Unifi AC! :RÉ



1
votes

J'ai un problème similaire et il est résolu en définissant GOARCH = mipsle . Cela devrait fonctionner

$ uname -a
Linux OpenWrt 4.14.151 #0 Tue Nov 5 14:12:18 2019 mips GNU/Linux

Mon cœur est MIPS 24KEc V5.0 , voir mon blog https://zyfdegh.github.io/post/202002-go-compile-for-mips/

Si ce n'est pas le cas, essayez ces étapes

  1. Vérifiez l'architecture du processeur, Big-Endian ou Little-Endian, en
$ lscpu | grep "Byte Order"

cat / proc / cpuinfo serait également utile.

  1. Vérifiez les informations du noyau, mips ou mips64, pour moi c'est mips (32)
GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build

  1. Si c'est Little-Endian, définissez GOARCH = mipsle , si c'est Little-Endian 64 bits, définissez set GOARCH=mips64le

Autre question connexe Programme d'écriture et de compilation pour OpenWrt j'espère que cela vous aidera.


0 commentaires