Je veux construire un monde bonjour statique à partir de C en utilisant arm-linux-gnueabi-gcc plutôt que d'utiliser la chaîne d'outils autonome NDK ou Codeourcery d'ailleurs.
Dans Ubuntu ...
J'ai fait ce qui suit:
Sudo apt-get install gcc-arm-linux-gnueabi
J'ai créé un hi.c comme ceci:
#include <stdio.h>
int main(int argc, char** argv) {
printf("hello world\n");
return 0;
}
Je l'ai compilé comme ceci:
arm-linux-gnueabi-gcc -static hi.c -o hi
Je l'ai exécuté sur un émulateur comme celui-ci:
adb Push hi /data/hi
adb Shell /data/hi
Mais je comprends ceci:
[1] Illegal instruction /data/hi
Quelle étape ai-je oublié? Sur la base de l'expérience passée, ce "aurait dû" fonctionner, mais j'ai évidemment foiré ça.
Si je fais cela sur une machine Debian (VM dans mon cas), tout semble bien. Je ne sais pas quoi faire quand on a tort de faire pareil sur Ubuntu. Cela pourrait être comme Leo l'a suggéré, mais je ne peux pas le confirmer. Cela devrait cependant vous convenir.
http://www.cnx-software.com/2012/01/16/installing-emdebian-arm-cross-toolchain-in-debian/
Quelqu'un a ajouté ce lien, mais il n'utilise pas la chaîne d'outils que j'ai mentionnée dans la description. Le laisser au cas où quelqu'un serait intéressé.
http://tariqzubairy.wordpress.com/2012/03/09/arm-binaries-static-library-for-Android/
Essayez de spécifier l'architecture/CPU. Il semble que le compilateur crée du code avec une version d'architecture supérieure à celle que l'émulateur peut gérer.
Cela pourrait fonctionner:
arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi
Cela a fonctionné pour moi avec le compilateur CodeBench sur le bureau Ubuntu. https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029
Créez simplement un binaire statique avec cette commande:
arm-none-linux-gnueabi-gcc -o hello -static hello.c
puis, adb Push hello/data
allez à, adb Shell $ ./data/hello Ceci imprimera Hello World sur le terminal. La même chose peut être faite à partir du téléphone. Utilisez l'émulateur de terminal ou le shell bash SL4A pour exécuter.
Pour autant que je sache, vous ne pouvez pas exécuter d'applications utilisateur dans Land Android qui ne sont pas compilées avec une certaine forme de gcc-arm-linux-androideabi.
Votre code fonctionne réellement pour moi.
Je l'ai compilé sur Ubuntu et je l'ai poussé vers/data/local/tmp
Et puis chmod 777 salut
Enfin ça marche bien.