Ho un progetto C++ che utilizza una libreria C++ che ho anche scritto. Sto usando clang ++ 3.3 per costruire tutto. Ogni file nella libreria viene compilata comeCreazione e utilizzo di librerie di codici a barre LLVM
clang++ -c -O -emit-llvm somefile.cpp -o somefile.bc
Sto quindi utilizzando LLVM-link per unire tutta la biblioteca * .BC file in un unico file di codice po 'come in modo
llvm-link -o MyLibrary.bc somefile.bc someotherfile.bc etc.bc
Sono Concettualizzare questo per essere simile alla creazione di un archivio di file oggetto, ma non penso che sia vero in base a come le cose stanno agendo.
Quindi compilo i file sorgente del mio progetto usando un comando simile a quello sopra. Ho quindi utilizzare LLVM-link (di nuovo) per combinare questi, insieme con il file di codice po libreria in un file di codice singolo bit come questo
llvm-link -o app.bc1 main.bc x.bc y.bc path/to/MyLibrary.bc
Successivo compilo app.bc1 in un file oggetto nativo
llc -filetype=obj app.bc1 -o app.o
Infine io uso clang ++ di nuovo per collegare questo file oggetto nativo (e contro le altre librerie native di cui ho bisogno, come ad esempio la libreria standard C++, ecc)
clang++ app.o -o app
Tuttavia, quello che sembra essere HAP il pening è che quando Ivm-link il codice bit dell'applicazione l'intero contenuto di MyLibrary.bc sembra essere incluso nel risultato. Quindi il collegamento finale deve risolvere i riferimenti fatti dai componenti della libreria che non sto effettivamente utilizzando.
Quello che mi piacerebbe fare è estrarre da MyLibrary.bc solo i file di codice bit di cui la mia applicazione ha bisogno. Vedo che c'è un programma di llvm-ar ma leggendo su di esso non ho l'impressione che sarebbe di aiuto qui. Ho immaginato di poter combinare la libreria con llvm-ar invece di llvm-link, ma non riesco a capirlo. Spero che tutto ciò di cui ho bisogno sia una piccola spinta :)
Il passaggio del collegamento non include alcuna indicazione di ottimizzazione o di rimozione definitiva da eseguire. Hai provato ad aggiungere una bandiera per farlo? –
Vuoi dire una bandiera su llvm-link? La documentazione qui http://llvm.org/docs/CommandGuide/llvm-link.html non parla di nessuna di tali flag. Ho provato a usare opt con i flag -dce e -adce ma non c'era alcun effetto (sul mio problema). –
No, sul link finale. Mettere a nudo una biblioteca non ha davvero senso. –