Sont llvm-gcc et clang binaire compatible avec gcc? - particulièrement mingw gcc sous Windows
Si je construire une bibliothèque statique avec llvm-gcc, puis le lier avec un programme compilé avec mingw gcc, le résultat du travail?
De même pour d'autres combinaisons de llvm-gcc, clang et normale de la gcc. Je suis intéressé par la façon dont cela fonctionne sur Linux (en utilisant la normale non-mingw gcc, bien sûr) et d'autres plates-formes, mais l'accent est mis sur Windows.
Je suis aussi intéressé dans toutes les langues, mais avec un fort accent sur C et C++ - évidemment clang ne prend pas en charge le Fortran, etc, mais je crois que llvm-gcc.
Je suppose qu'ils utilisent tous l'ELFE format de fichier, mais ce que sur les conventions d'appel, table virtuelle mises en page etc?
OriginalL'auteur Steve314 | 2010-07-10
Vous devez vous connecter pour publier un commentaire.
Oui, pour du code C Clang et GCC sont compatibles (ils utilisent tous les deux la Chaîne d'outils GNU pour relier, en fait.) Vous avez juste à vous assurer que vous dites clang pour créer des objets compilés et pas d'intermédiaire bitcode objets. C ABI est bien définie, de sorte que le seul problème est le format de stockage.
C++ n'est pas portable entre les compilateurs de la moindre; différents compilateurs utilisent différents virtuel de la table des appels, des constructeurs, la destruction, l'amputation des noms, des modèles de mises en œuvre, etc. En règle générale, vous devez considérer les objets d'un compilateur C++ ne fonctionnera pas avec un autre.
Cependant oui, au moment de la rédaction Clang++ est capable d'utiliser GCC/C++ compilé les bibliothèques; j'ai récemment mis en place une plate-forme pour compiler des programmes C++ avec clang à l'aide de G++standard de la bibliothèque d'exécution et il compile+liens de l'amende juste.
J'ai oublié de dire que vous avez à faire cela si vous voulez utiliser Clang++ en C++11 mode. Vous devez spécifier le clang/LLVM C++11-compatible standard de la bibliothèque, du ccg standard lib n'est pas bon.
Accepter de commutation sur l'opinion populaire. Autant que je me souvienne, je n'ai pas vraiment de réponse, j'étais pleinement satisfait, donc accepté tout ce qui n'était pas mon propre non-réponse. Comme cette réponse semble la plus utile à d'autres, cependant, il devrait probablement être accepté.
êtes-vous sûr que vous n'avez pas à essayer de lier un programme lié à l'encontre de la libc++ avec une version de Boost, qui est lié à l'encontre de libstdc++?
OriginalL'auteur Skrylar
Je ne connais pas la réponse, mais diapositive 10 dans cette présentation semble impliquer que l' ".o" les fichiers produits par llvmgcc contient le bytecode LLVM (.bc) au lieu de l'habituel cible spécifique de code de l'objet, de sorte que le lien d'optimisation est possible. Cependant, la VERSION de l'éditeur de liens doit être en mesure de relier LLVM code avec le code produit par "normal" GCC, comme la diapositive suivante dit "lien en natif .o fichiers et bibliothèques".
LLVM est un Linux outil, j'ai parfois trouvé que Linux compilateurs ne fonctionne pas tout à fait à droite sur Windows. Je serais curieux de savoir si vous l'obtenir pour travailler ou non.
LLVM est pas un "Linux". Il est également le compilateur préféré de la chaîne sur Apple OS X qui est Unix.
OriginalL'auteur Qwertie
- Je utiliser -m i386pep lors de la liaison de clang .o fichiers par ld. llvm est la dévotion à l'intégration avec gcc est considéré ouvertement à http://dragonegg.llvm.org/ donc, il est très intuitif à deviner llvm de la famille va être grandement de la croix-compatible avec gcc outil de la chaîne.
OriginalL'auteur Chawathe Vipul
Désolé - j'étais de retour à llvm après une pause, et n'ont jamais fait beaucoup plus que le tutoriel. La première fois, j'ai un peu brûlé après la lutte contre l'obtention de LLVM 2,6 à construire sur MinGW GCC - heureusement pas un problème avec LLVM 2.7.
Passer par le tutoriel de nouveau aujourd'hui, j'ai remarqué dans le Chapitre 5 du tutoriel pas seulement une déclaration claire que LLVM utilise l'ABI (Application Binary Interface) de la plate-forme, mais aussi que le tutoriel compilateur dépend de ce pour permettre l'accès à des fonctions externes, telles que sin et cos.
Je ne sais pas encore si le compatible ABI s'étend à C++, cependant. Ce n'est pas une question de conventions d'appel tant que nom d'amputation, structure de mise en page et de la vtable de mise en page.
Être capable de faire C appels de fonction est suffisant pour la plupart des choses, il y a encore quelques problèmes où je me soucie de C++.
OriginalL'auteur Steve314
En espérant qu'elle fixe, mais je éviter de llvm-gcc parce que j'ai (aussi) l'utilisation de llvm comme un cross compilateur et lorsque vous utilisez llvm-gcc-m32 sur un ordinateur 64 bits le -m32 est ignoré et vous obtenez 64 bits entiers qui doivent être truquées sur votre 32 bits de la machine cible. Clang n'a pas de bug ni de gcc. Aussi la plus-je utiliser clang plus je l'aime. Quant à votre question directe, ne sais pas, en théorie, ces jours-ci, des objectifs ont bien connu ou utilisé des conventions d'appel. Et vous espérons à la fois gcc et llvm respecter les mêmes, mais on ne sait jamais. la façon la plus simple de le savoir est d'écrire un couple de fonctions simples, de compiler et de le démonter à l'aide de deux ensembles d'outils et de voir comment ils passent d'opérandes pour les fonctions.
OriginalL'auteur old_timer