LLVM & Clang ne peux pas compiler pour une arche de prise en charge
Sous Ubuntu 64 bits, je suis
llc --version
LLVM (http://llvm.org/):
LLVM version 3.1
Optimized build with assertions.
Built Oct 15 2012 (18:15:59).
Default target: x86_64-pc-linux-gnu
Host CPU: btver1
Registered Targets:
arm - ARM
mips - Mips
mips64 - Mips64 [experimental]
mips64el - Mips64el [experimental]
mipsel - Mipsel
thumb - Thumb
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
Je ne peux pas faire ce
clang -march=arm -x c++ /tmp/cpp.cpp
error: unknown target CPU 'arm'
Il me manque quelque chose ici ? Pourquoi je ne peux pas compiler pour les BRAS ?
OriginalL'auteur user1849534 | 2012-12-19
Vous devez vous connecter pour publier un commentaire.
la version de l'éditeur de liens de liens pour l'hôte, qui est seulement une des cibles, il l'habitude de lien vers chaque cible dans la liste. il va certainement compiler pour n'importe quelle cible. Fondamentalement, clang va de C/C++ pour le bytecode, puis llc prend bytecode et fait l'assemblage de l'objectif spécifique (nouveau experrimental option de prendre le pseudo-code binaire directement en fichier objet), alors vous avez besoin pour obtenir une croix à l'assembleur et l'éditeur de liens pour prendre le dernier kilomètre (j'utilise gnu binutils). Malheureusement, j'ai trouvé que le bruit de bytecode n'est pas complètement générique (je l'avais espéré et attendu qu'il serait), il n'en fait changer la cible d'une sortie indépendante fondée sur la cible. L'exemple ci-dessous à l'aide de l'hôte triple au lieu de l'aide de -mars, pour mes exemples pour construire correctement sur plusieurs hôtes.
Je n'ai pas, mais avant longtemps, va expérimenter avec l'aide de la llc directement à l'objet (en fait je l'ai essayé sur un test simple mais ne l'ont pas utilisé sur quoi que ce soit plus ou posté n'importe où).
OriginalL'auteur old_timer
Pour obtenir une liste des options du compilateur clang, à l'aide de
Pour spécifier la cible, utilisez
-triple
où le "vendeur" et "os" devrait être remplacé par le vendeur et le nom du système d'exploitation. Il peut également être remplacé par
unknown
.triple
est une chaîne de caractères dans le formulaireARCHITECTURE-VENDOR-OS
ouARCHITECTRUE-VENDOR-OS-ENVIRONMENT
, par exemple:x86_64-apple-darwin10
clang
(3.6) n'a pas d'option-triple
->error: unknown argument
(pas dans-help
)OriginalL'auteur Lei Mou
-mars est de LLVM interne des outils de ligne de commande option et n'est pas connecté avec clang. Si vous avez besoin de compiler pour les autres cibles, vous devez spécifier la cible triplet. Cela peut être fait de plusieurs façons (je ne me souviens pas désinvolte, qu'ils travaillent avec 3.1, mais ils ont certainement travailler avec 3.2):
arm-none-linux-gnueabi-clang et compiler le tout par elle
-target
option, par exempleclang -target arm-none-linux-gnueabi
-target
option fonctionne, merci!N'est-ce pas l'option en effet
--target
(avec 2 tirets)?OriginalL'auteur Anton Korobeynikov
Vous êtes confus de vos drapeaux. clang est
-march=
veut un processeur de la famille. Vous avez probablement censé utiliserclang -arch arm
à la place.clang -arch arm -x c++ /tmp/cpp.cpp
qui mène àclang: warning: argument unused during compilation: '-arch arm'
, cela ne résout pas mon problèmeCurieux. Quelle est la version de clang utilisez-vous? Mon clang-421 a l'arc-drapeau.
êtes-vous sur linux ? J'utilise la version de clang inclus dans l'Android NDK r8c pour Linux
Non, je suis sur OS X, donc je suis en utilisant le clang qui est fourni avec Xcode. Un rapide google suggère que Android NDK r8c vient avec Clang 3.1, alors que je suis en utilisant Clang 4.1.
-arch est darwin seule option.
OriginalL'auteur Lily Ballard
Comme ce commentaire dit que cette option n'est pas encore pris en charge sous linux, pour l'instant.
OriginalL'auteur user1849534
"-arch bras" est équivalent à "arc-armv4t" en grand bruit de ferraille. Je suppose qu'un générique de "bras" la cible n'est pas permis avec "-march=", qui devrait exiger quelque chose de plus précis, tels que "armv6", "thumbv7", "armv4t", ...
Essayez de sélectionner un spécifique subarch.
OriginalL'auteur LeoTh3o