2011-04-10 4 views
2

J'essaye de croiser compiler en utilisant cygwin à l'émulateur Android. J'ai utilisé ce article comme point de départ. J'ai installé le compilateur croisé suivant ces instructions. Ensuite, je préparais le makefile en utilisantCroix de compilation pour arm-linux en utilisant cygwin

./configure -host=arm-linux 

Maintenant, quand je fais make je reçois l'erreur suivante:

$ make 
make all-recursive 
make[1]: Entering directory `/home/bruce/strace-4.6' 
Making all in tests 
make[2]: Entering directory `/home/bruce/strace-4.6/tests' 
make[2]: Nothing to be done for `all'. 
make[2]: Leaving directory `/home/bruce/strace-4.6/tests' 
make[2]: Entering directory `/home/bruce/strace-4.6' 
arm-linux-gcc -DHAVE_CONFIG_H -I. -I./linux/arm -I./linux -I./linux -Wall -Wwr 
ite-strings -g -O2 -MT block.o -MD -MP -MF .deps/block.Tpo -c -o block.o block.c 

block.c: In function `block_ioctl': 
block.c:198: error: `u64' undeclared (first use in this function) 
block.c:198: error: (Each undeclared identifier is reported only once 
block.c:198: error: for each function it appears in.) 
block.c:271: error: `BLKTRACESTOP' undeclared (first use in this function) 
make[2]: *** [block.o] Error 1 
make[2]: Leaving directory `/home/bruce/strace-4.6' 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory `/home/bruce/strace-4.6' 
make: *** [all] Error 2 

Cela se produit même si je joins -static après la variable CFLAGS dans le Makefile (Pourquoi dois-je fais ceci?). S'il vous plaît aider.

Voici les lignes 198-206:

case BLKGETSIZE64: 
     if (exiting(tcp)) { 
      uint64_t val; 
      if (syserror(tcp) || umove(tcp, arg, &val) < 0) 
       tprintf(", %#lx", arg); 
      else 
       tprintf(", %" PRIu64, val); 
     } 
     break; 

Répondre

2

Tout d'abord, qu'est-ce BLKGETSIZE64 #defined comme? Il se peut qu'un jeton "u64" se cache dans la définition.

Un int de 64 bits est-il réellement un objet bien défini en ce qui concerne arm-linux-gcc? Juste une pensée ... mais ça doit être, non? Et l'ajout -static à CFLAGS provoque le lien statique du programme binaire, par opposition à dynamiquement. Cela signifie que tout le code qu'il doit exécuter sera intégré dans l'exécutable. Habituellement, il lierait dynamiquement aux bibliothèques d'objets partagés (fichiers .so, DLL sous Windows), mais vous ne pouvez pas nécessairement compter sur les bibliothèques particulières dont votre programme a besoin pour être incluses dans un périphérique intégré. Plutôt que d'installer toutes les bibliothèques sur l'ordinateur de poche, vous pouvez (probablement) économiser de l'espace en construisant simplement les bits pertinents dans votre exécutable.

Questions connexes