A partire da questo codice sorgente:
fn main() {
println!("Hello, world!");
}
È possibile creare LLVM rappresentazione intermedia (IR) o codice binario che (BC):
# IR in hello.ll
rustc hello.rs --emit=llvm-ir
# BC in hello.bc
rustc hello.rs --emit=llvm-bc
Questi file possono poi essere ulteriormente elaborati da LLVM per produrre l'assemblaggio o un file oggetto :
# Assembly in hello.s
llc hello.bc
# Object in hello.o
llc hello.bc --filetype=obj
Quindi è necessario collegare i file per produrre un file eseguibile. Ciò richiede il collegamento alle librerie standard di Rust. Il percorso è piattaforma e la versione-dipendente:
cc -L/path/to/stage2/lib/rustlib/x86_64-apple-darwin/lib/ -lstd-2f39a9bd -o hello2 hello.o
È possibile quindi eseguire il programma:
DYLD_LIBRARY_PATH=/path/to/stage2/lib/rustlib/x86_64-apple-darwin/lib/ ./hello2
Questa risposta ha soluzioni specifiche OS X, ma i concetti generali dovrebbe essere estensibile a Linux e Windows. L'implementazione sarà leggermente diversa per Linux e probabilmente molto per Windows.
'rustc' è il compilatore Rust, esso non viene compilato altri formati di input. Perché non utilizzare LLVM 'llc' o equivalente se si dispone del codice bit? – Shepmaster
Questa è stata la mia ipotesi iniziale, ma non ho molta familiarità con l'ambiente e ho trovato questo: -filetype - Scegli un tipo di file (non tutti i tipi sono supportati da tutti i target): = asm - Emetti un assembly ('.s') file = obj - Emetti un file oggetto nativo ('.o') = null - Non emettere nulla, per il test delle prestazioni. Nessuno di loro sembrava quello che stavo cercando. –