2013-01-14 10 views
7

Według LLVM's Getting Started (Windows) site:Dlaczego clang/llvm w systemie Windows wymaga programu Visual Studio's Link.exe?

... Clang mogą być wykorzystywane do emitowania bitcode bezpośrednio emitują plików obiektowych czy nawet połączone wykonywalne za pomocą Visual Studio link.exe.

Dlaczego korzystanie z Link.exe w systemie Windows jest konieczne? A co z tego, co jest używane na Mac/Linux? Dalej na dole jest napisane:

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 

Dlaczego firma LLC nie może wykonać tego ostatniego kroku? Wydaje się, że LLI działa dobrze, więc zakładam, że współpracuje on z link.exe jakoś pod maską - dlaczego nie może być LLC?

Odpowiedz

11

Ponieważ nikt nie napisał łącznika dla LLVM.

Jest projekt, który to zrobi (zwany niewyobrażalnie lld), ale nie jest jeszcze gotowy.

Aby uzyskać więcej informacji, patrz http://lld.llvm.org.

Na Macu ludzie używają łącznika Apple, ld.

Na Linuksie, większość ludzi używa GNU łącznika, zwykle (także) o nazwie ld

+0

Chyba oznacza to, że LLVM nie wykonuje LTO? – Mehrdad

+0

@Mehrdad: LLVM wykonuje LTO na poziomie IR. Ale nawet jeśli plik wykonywalny jest tworzony z pojedynczego pliku .s, nadal musi być połączony. –

+1

@Mehrdad, zarówno 'gold', jak i Mac' ld' mogą używać LLVM do LTO. –

5

Spróbuj ld MinGW-W64 jest. Używam go z klanem llvm zamiast narzędzi VS, których użyłem do budowania klangów w pierwszej kolejności.