Yazdığım bir C++ kitaplığı kullanan bir C++ projem var. Ben her şeyi inşa etmek için clang ++ 3.3 kullanıyorum. kütüphanede Her dosya Sonra ben bu yüzdenLLVM bit kodu kitaplıkları oluşturma ve kullanma
llvm-link -o MyLibrary.bc somefile.bc someotherfile.bc etc.bc
gibi tek bitlik kod dosyası içine tüm kütüphane * .bc dosyaları birleştirmek için LLVM-bağlantısını kullanıyorum
clang++ -c -O -emit-llvm somefile.cpp -o somefile.bc
olarak derlenmektedir Bu, nesne dosyalarının bir arşivini oluşturmaya benzer bir şekilde kavramsallaştırıyor, ancak bunun nasıl hareket ettiğine bağlı olduğunu sanmıyorum.
Daha sonra, projemin kaynak dosyalarını, yukarıdaki ile aynı komutu kullanarak derledim. Sonra ben bir yerli nesne dosyası
llc -filetype=obj app.bc1 -o app.o
içine app.bc1 derlemek bu
llvm-link -o app.bc1 main.bc x.bc y.bc path/to/MyLibrary.bc
Sonraki gibi tek bitlik kod dosyası içine kütüphane bit kod dosyası ile birlikte, bu birleştirmek için (tekrar) LLVM-linki kullanınız
Son olarak kullandığım çınlama Bu yerel nesne dosyasını bağlamak için tekrar ++ (ve örneğin, C++ standardı kütüphane, vb ihtiyacım diğer yerli kütüphaneler, karşı) Ancak
clang++ app.o -o app
ne hap gibi görünen pening, uygulamanın bit kodunu bağladığımda, MyLibrary.bc'nin tüm içeriğinin sonuca dahil edilmiş gibi görünmesidir. Böylece son bağlantı aslında kullanmayan kütüphane bileşenleri tarafından yapılan referansları çözmek gerekiyor.
Ne yapmak istediğim, MyLibrary.bc uygulamasından yalnızca uygulamanın gerektirdiği bit kod dosyalarını ayıklamaktır. Görüyorum ki bir llvm-ar programı var ama bu konuyla ilgili olarak, burada yardımcı olacağı izlenimini almıyorum. Kütüphaneyi llvm-ar yerine llvm-ar ile birleştirebileceğimi tahmin ettim ama anlayamıyorum. Tek ihtiyacım olan şey biraz ümit etmektir umuyoruz.
Bağlantı adımınız, gerçekleştirilmesi gereken herhangi bir optimizasyon veya ölü çıkarma belirtisi içermez. Bunu yapmak için bir bayrak ekledin mi? –
llvm-link üzerinde bir bayrak mı demek istiyorsun? Buradaki belgeler http://llvm.org/docs/CommandGuide/llvm-link.html herhangi bir bayrak hakkında konuşmuyor. -dce ve -adce bayraklarını tercih etmeyi denedim ama hiçbir sorun yoktu (benim sorunumda). –
Hayır, son bağlantıda. Ölü bir kütüphaneyi sıyırmak gerçekten bir anlam ifade etmiyor. –