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
#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
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
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
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