Construire 32 bits avec 64 bits llvm-gcc
J'ai une version 64 bits de llvm-gcc, mais je veux être en mesure de construire à la fois 32 bits et 64 bits binaires. Est-il un drapeau pour cela? J'ai essayé en passant -m32 (qui fonctionne sur le réseau régulier de gcc), mais j'obtiens un message d'erreur comme ceci:
[jay@andesite]$ llvm-gcc -m32 test.c -o test
Warning: Generation of 64-bit code for a 32-bit processor requested.
Warning: 64-bit processors all have at least SSE2.
/tmp/cchzYo9t.s: Assembler messages:
/tmp/cchzYo9t.s:8: Error: bad register name `%rbp'
/tmp/cchzYo9t.s:9: Error: bad register name `%rsp'
...
C'est à l'envers; je veux générer le code 32 bits pour 64 bits processeur!
Je suis en cours d'exécution llvm-gcc 4.2, celui qui vient avec Ubuntu 9.04 x86-64.
EDIT: Voici la partie pertinente de la sortie quand je lance llvm-gcc avec le drapeau-v:
[jay@andesite]$ llvm-gcc -v -m32 test.c -o test.bc
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../llvm-gcc4.2-2.2.source/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/usr/lib/llvm/gcc-4.2 --enable-languages=c,c++ --program-prefix=llvm- --enable-llvm=/usr/lib/llvm --enable-threads --disable-nls --disable-shared --disable-multilib --disable-bootstrap
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5546) (LLVM build)
/usr/lib/llvm/gcc-4.2/libexec/gcc/x86_64-linux-gnu/4.2.1/cc1 -quiet -v -imultilib . test.c -quiet -dumpbase test.c -m32 -mtune=generic -auxbase test -version -o /tmp/ccw6TZY6.s
J'ai regardé dans /usr/lib/llvm/gcc-4.2/libexec/gcc en espérant trouver un autre binaire, mais le seul répertoire, il existe x86_64-linux-gnu. Je vais probablement regarder la compilation llvm-gcc à partir de la source avec les options appropriées suivant.
source d'informationauteur Jay Conrod
Vous devez vous connecter pour publier un commentaire.
Essayez de définir:
avant de compiler...
Pourriez-vous essayer cette série de commandes et de voir si cela fonctionne? Théoriquement, si vous avez fourni llvm-gcc avec l'option-m32 option, ces mesures devraient être prises par llvm-gcc, mais peut-être qu'il ne fonctionne pas correctement, donc, nous allons faire toutes les étapes explicite:
Ce devrait être la séquence d'étapes (ou quelque chose de similaire) que llvm-gcc effectue implicitement, mais il semble que dans votre cas, c'est en émettant 64bit assemblée pour une raison quelconque, puis d'essayer de les assembler et de les lier pour les 32 bits.
J'ai eu le même problème, llvm-gcc ignore les drapeaux, la seule solution qui a fonctionné a été de passer de llvm-gcc pour clang qui respecte la -m32. Que ou de passer à une version 32 bits du système d'exploitation pour llvm-gcc travail.