2012-09-28 3 views
2

Il existe un tutoriel - http://llvm.org/docs/GettingStartedVS.html Exemple réalisé en C. Je peux le compiler et le lier. Sans problème, vraiment. Mais j'ai besoin de C++, pas de C pur. Et là commencent les difficultés.Comment compiler un programme C++ dans LLVM en utilisant clang ++?

Pour clang ++ J'utilise chaîne comme

"C:\..> clang++ -c hello.cpp -emit-llvm -o hello.bc" 

alors:

"C:\..> llc -filetype=obj hello.bc" 

et

"C:\..> link hello.obj -defaultlib:libcmt -out:hello.exe" 

là j'obtenir 14 erreurs LNK2001: unresolved external symbol

, je dois donc s quelques conseils. Ce que je fais mal?

//----------------- 

hello.cpp:

#include <iostream> 

int main() 

{ 

    std::cout << "TEST\n" << std::endl; 

    return 0; 

} 

//----------------- 

OS: Windows7.

UPD: Question principale: comment depuis .bc obtenir .exe? (LLVM, Windows7)

+0

sur ma machine linux je peux simplement lancer 'clang ++ -c hello.cpp -o hello'. cela ne fonctionne pas sur Windows? – none

+0

il y a un moyen d'obtenir .exe, mais j'ai besoin d'obtenir .bc (bytecode LLVM), et puis de .bc obtenir .exe ... – kpdev

+1

Vous ne postez pas les erreurs de lien que vous obtenez, mais je suppose que est l'exécution C++, cet article indique que vous avez besoin de mcsvcr80.dll pour le support C++, donc je suppose que vous devez ajouter cela à la ligne de lien ... http://msdn.microsoft.com/fr-fr/library/abx4dbyh (v = vs.80) .aspx – combinatorial

Répondre

1

Vous pouvez utiliser mes GCC et Clang paquets:

Téléchargez et les extraire dans le même répertoire. Clang utilisera le CRT de GCC 4.6.3 de libstdC++ et de MinGW-w64. Appelez-le comme vous gcc. Clang/LLVM ne peut actuellement pas fonctionner avec la bibliothèque C++ MSVC, en raison de problèmes ABI.

La libstdC++ de GCC fonctionne assez bien, bien qu'elle ait des trous dans des endroits surprenants (comme std::to_string, <regex>, et <thread>).

Le support Windows de Clang est OK, mais loin d'être terminé. Vous ne pouvez pas, par exemple, dllexporter des classes C++ entières, malheureusement. Et la génération de code Win64 n'est également pas assez bonne pour avoir une installation C++ fonctionnelle (même en combinaison avec GCC, comme pour 32 bits).

+0

On dirait que ça fonctionne. Merci beaucoup! Mais j'ai une nouvelle erreur: C: \ Windows \ System32> C: \ Gms \ mingw32-dw2 \ bin \ clang ++. Exe -c C: \ Alien \ hellocpp.cpp -mémoire-llvm -o C: \ Alien \ hellocpp.bc C: \ Windows \ System32> C: \ Gms \ mingw32-dw2 \ bin \ llvm-dis.exe kpdev

+0

Cela je ne sais pas.Le fait est que vous n'avez plus besoin de passer par le bitcode LLVM, mais utilisez Clang comme un compilateur normal et compilez le code objet et les exécutables directement. – rubenvb

+0

Ne pas avoir à passer par le bitcode LLVM plus ... Dommage ... Ma recherche de doctorat est en train de développer un compilateur pour le langage de programmation académique (appelons-le APL). Maintenant, nous avons un traducteur d'APL vers C++. Mais ma tâche est d'écrire un traducteur d'APL vers le bitecode LLVM (au moins, ce serait bien). Et, si possible, d'utiliser des parties pré-écrites du traducteur APL-> C++. – kpdev

Questions connexes