2013-01-14 10 views
7

Nach LLVM's Getting Started (Windows) site:Warum benötigt clang/llvm unter Windows Visual Studio's Link.exe?

... Clang verwendet werden können Bitcode emittieren, direkt Objektdateien emittieren oder auch verknüpfte ausführbare Visual Studio link.exe verwenden.

Warum ist die Verwendung von Link.exe unter Windows erforderlich? Und was wird auf Mac/Linux verwendet? Weiter unten steht:

Compile the program to object code using the LLC code generator: 
    C:\..> llc -filetype=obj hello.bc 
Link to binary using Microsoft link: 
    C:\..> link hello.obj -defaultlib:libcmt 

Warum kann LLC diesen letzten Schritt nicht ausführen? LLI scheint gut zu funktionieren, also nehme ich an, dass es mit link.exe irgendwie unter der Haube zusammenarbeitet - warum kann LLC nicht?

Antwort

11

Weil niemand einen Linker für LLVM geschrieben hat.

Es gibt ein Projekt dazu (genannt, einfallslos lld), aber es ist noch nicht fertig.

Weitere Details finden Sie unter http://lld.llvm.org.

Auf dem Mac verwenden Menschen Apples Linker, ld.

Unter Linux verwenden die meisten Menschen den Gnu-Linker, in der Regel (auch) mit dem Namen ld

+0

Ich denke, das bedeutet LLVM tut nicht LTO? – Mehrdad

+0

@Mehrdad: LLVM tut LTO auf IR-Ebene. Aber selbst wenn eine ausführbare Datei aus einer einzelnen .s-Datei erstellt wird, muss sie dennoch verknüpft werden. –

+1

@Mehrdad, sowohl 'gold' als auch Mac' ld' können das LLVM-Plugin für LTO verwenden. –

5

MinGW-W64 des ld Versuchen. Ich benutze es mit llvm's clang anstelle von VS-Tools, die ich für den Aufbau von clang verwendet habe.

Verwandte Themen