Zusammenfassung: llvm-ld
wurde aus der LLVM 3.2-Version . Ich versuche herauszufinden, wie man in meinem Build-System Clang an seiner Stelle verwendet.
Beachten Sie, dass ich beim Schreiben die Antwort auf meine eigene Frage herausgefunden habe, aber ich poste sie immer noch, falls sie für andere nützlich ist. Alternative Antworten sind ebenfalls willkommen.
Details :
Ich habe einen Build-Prozess, der zuerst bitcode mit clang++ -emit-llvm
erzeugt. Dann nehme ich die Bitcodedateien und verknüpfe sie mit llvm-link
. Dann wende ich einige Standard-Optimierungsdurchläufe mit opt
an. Dann wende ich einen anderen benutzerdefinierten Compiler-Durchlauf mit opt
an. Dann verwende ich die Standard-Optimierungsdurchläufe erneut mit opt
ein drittes Mal. Schließlich nehme ich die Ausgabe von der letzten Ausführung von opt
und verwende llvm-link
, um mit geeigneten Bibliotheken zu verlinken, um meine ausführbare Datei zu erzeugen. Als ich versucht habe, llvm-link
durch clang++
zu ersetzen, bekomme ich die Fehlermeldung: file not recognized: File format not recognized
Um diese Frage konkreter zu machen, habe ich ein vereinfachtes Beispiel dafür erstellt, was ich zu tun versuche. Zuerst gibt es zwei Dateien, die ich kompilieren und verknüpfen möchte
test1.cpp:
%Vor%test2.cpp
%Vor%Ich habe die folgende Befehlssequenz ausgeführt:
%Vor%(Beachten Sie, dass ich derzeit llvm 3.1 ausführe, aber ich versuche herauszufinden, welche Schritte für llvm 3.2 funktionieren. Ich gehe davon aus, dass ich die LLVM 3.1-Version mit clang korrekt ausführen kann statt llvm-ld)
Dann wenn ich renne:
%Vor% alles ist in Ordnung und a.out
druckt 5 aus.
Allerdings, wenn ich renne:
%Vor%Dann bekomme ich die Fehlermeldung:
%Vor% Offensichtlich weiß ich, dass ich eine ausführbare Datei erzeugen kann, indem ich clang direkt in den .cpp-Dateien abspiele. Aber ich frage mich, was der beste Weg ist, clang
mit opt
zu integrieren.
Der in der Frage beschriebene Testfall kann mit den folgenden Schritten kompiliert werden:
%Vor% Dies erzeugt eine funktionierende a.out
Datei.
Es scheint, dass llc
benötigt wird, um von Bitcode in Maschinencode zu konvertieren, der dann von clang
normal verarbeitet werden kann.
Im Allgemeinen habe ich das gefunden
%Vor%kann durch
ersetzt werden %Vor%