2016-03-19 12 views
2

Ich habe derzeit ein Problem mit einfachen Projekt (oder llvm-Beispiel für diese Angelegenheit). Meine Aufgabe erfordert, dass ich llvm-Bibliotheken verwende, aber das ist nicht so einfach, wie ich es mir erhofft hatte.Verwenden von LLVM-Bibliotheken in C++ Projekt

Ich habe LLVM mit MinGW GCC und CMake bauen. Nach dem Build kann ich mit clang file kompilieren. Allerdings, wenn ich mit

Programm erstellen
#include "llvm-c/Core.h" 

int main(int argc, char**argv) 
{ 
    return 0; 
} 

und versuchen, es zu kompilieren

clang++ main.cpp 

ich

In file included from main.cpp:1: 
./llvm-c/Core.h:18:10: fatal error: 'llvm-c/ErrorHandling.h' file not found 
#include "llvm-c/ErrorHandling.h" 

Für dieses Beispiel habe ich kopiert Inhalt von include Verzeichnis einfachen Hallo Welt Typ in Verzeichnis mit main.cpp. Nachdem ich dieses Problem bekommen habe, habe ich versucht, diese Header zu überprüfen und alle haben die Position llvm/ oder llvm-c/ anstelle der reinen relativen Adresse. Ich dachte, diese Bibliotheken wurden verwendet, um/llvm zu erstellen und libs für mich zu verwenden sind eigentlich in build Verzeichnis, wo ich llvm gebaut habe, aber include Verzeichnis in Build hat nur etwa 1/2 *.h Dateien.

Ich kann nicht scheinen, nichts in der Dokumentation zu diesem und sogar grundlegenden llvm Beispielen zu finden erwarte Einbeziehung Problem schließen Libs in Format wie llvm/Core.h

EDIT

Nach der Lösung, jetzt bekomme ich einige andere Probleme, die mit Mingw verbunden zu sein scheint.

So sieht ein neues Programm aus.

#define __STDC_LIMIT_MACROS 
#define __STDC_CONSTANT_MACROS 

#include <llvm-c/Core.h> 

using namespace std; 

int main() 
{ 
    LLVMModuleRef rff = LLVMModuleCreateWithName("testname"); 
    return 0; 
} 

dies erzeugt

d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(CommandLine.cpp.obj):CommandLine.cpp|| undefined reference to `__mingw_strtod'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(regerror.c.obj):regerror.c|| undefined reference to `__ms_vsnprintf'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `[email protected]'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `[email protected]'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `_imp___chsize_s'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_Profile'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_Profile'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_Profile'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_Profile'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(Path.cpp.obj):Path.cpp|| undefined reference to `FOLDERID_LocalAppData'| 
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.9.3\..\..\..\libLLVMSupport.a(TimeValue.cpp.obj):TimeValue.cpp|| undefined reference to `_localtime32'| 

I llvm-config --libs core für Linker-Additionen verwendet.

Versuchte Befehle:

g++ main.cpp -lLLVMCore -lLLVMSupport 
clang++ main.cpp -lLLVMCore -lLLVMSupport 
+0

installiert "Für dieses Beispiel habe ich den Inhalt des Include-Verzeichnisses in das Verzeichnis mit main.cpp kopiert" - Meinst du, dass Ihr Problem "behoben"? – wvoquine

+1

In Build-System sollten Sie den Include-Pfad mit dem llvm/include-Verzeichnis und Bibliothekspfad mit dem Verzeichnis im Build, wo Sie Ihre Bibliothek Binärdateien haben ... vermutlich Build/lib – wvoquine

+0

Nein, es nicht. Es kompiliert zu diesem Zeitpunkt nicht, weil libs mit ihren Ordnern im Pfad enthalten sind (was den finalen Pfad zu etwas wie 'llvm-c/llvm-c/Core.h 'macht), dachte ich, dass vielleicht Ordner aus jeder Instanz von' # include' entfernt werden könnte würde helfen, aber es ist zu viele Dateien und ich denke nicht, das ist richtige Ansatz – DFDark

Antwort

0

Wenn Sie die aus Ihrer-llvm benötigen/include stattdessen den Inhalt der Sie nur den mit Pfad zu Ihrem-llvm/include angeben umfassen Verzeichnis kopieren sollte - Ich Option oder was auch immer das Build-System benötigt.

+0

Das haben Sie bereits versucht, bevor Sie diese Frage stellen. 'clang ++ main.cpp -I" D: \ llvm \ include "' hier ist der Befehl, den ich benutzt habe. Und das ist das Ergebnis: 'In der Datei enthalten von D: \ llvm \ include/llvm-c/ErrorHandling.h: 17: 0, von D: \ llvm \ include/llvm-c/Core.h: 18, von main.cpp: 1: D: \ llvm \ include/llvm-c/Types.h: 17: 36: Schwerwiegender Fehler: llvm/Support/DataTypes.h: Nein Datei oder Verzeichnis #include "llvm/Support /DataTypes.h " ^ Kompilierung beendet." – DFDark

+0

Ich habe endlich das funktioniert, es ist meist das, aber was getan werden musste, ist hinzuzufügen nicht nur Include-Verzeichnis von 'llvm/include' sondern auch' llvm/build/einschließen ". Build scheint selbst einige Bibliotheken erzeugt zu haben. Jetzt erscheinen nur noch "undefined referce to ..." Fehler, die ich zur Hauptfrage hinzufügen werde. – DFDark

2

Das sind WinAPI-Referenzen. Der einfachste Weg ist zu finden, dass die Google-Dokumentation dafür ist oder gehen Sie in das Mingw-Bibliotheksverzeichnis (..\mingw530_32\i686-w64-mingw32\lib\) und finden Sie in Dateien.

So

  • FOLDERID_LocalAppData in libuuid.a so definiert ist, verwenden Sie die -luuid Kompilierung Parameter
  • [email protected] in libole32.a so definiert ist, verwenden Sie die -lole32 Kompilierung Parameter

Für mich g++ -std=c++11 -ID:\Devel\install\include main.cc -LD:\Devel\install\lib -lLLVMCore -lLLVMSupport -luuid -lole32

ist w orking als ich die llvm zu D:\Devel\install

Verwandte Themen