2013-04-13 16 views
5

llvm::WriteBitcodeToFile ile bitcode dosyası olarak bıraktığım bir llvm modülüne sahibim. Bu bit kodu dosyasını, modüldeki işlevleri içeren dinamik olarak yüklenebilen bir kütüphaneye dönüştürmek istiyorum.LLVM bit kodundan konum bağımsız bir nesne dosyası oluşturun

Bunu nasıl yaparım? Ben bunun için llc kullanarak çalıştı, ancak bu görünüşte aşağıdaki adımları yaptıktan sonra yana, yeri değişebilen değildir kod üretir: nihayet

as -o mylib.o em.s 

: Bir nesne dosyasına gnu as ile assemblying ardından

llc -enable-pie -cppgen=functions -filetype=asm executableModule -o em.s 

ile paylaşılan bir kütüphane üretmek için çalışıyor:

gcc -shared -o libmyfile.so -fPIC mylib.o 

hata ile başarısız:

/usr/bin/ld: error: mylib.o: requires dynamic R_X86_64_PC32 reloc against 'X.foo' which may overflow at runtime; recompile with -fPIC 
collect2: ld returned 1 exit status 

cevap

8

Yeniden yerleştirme modelini ayarlamanız gerekir. -llc -relocation-model = pic gibi bir şey. PIE kullanmayın, çünkü kütüphaneler için değil, yürütülebilir dosyalar içindir. Ayrıca, -cppgen burada herhangi bir anlam ifade etmiyor, sadece cpp backend için.

+0

teşekkürler !!!!, assembler'a güvenmeksizin kütüphaneyi doğrudan IR bit kodundan oluşturmak için bir araç var mı? – lurscher

+0

llc'nin yerel kod çıktısını desteklediğini gördüm, ancak deneysel. Bunun için üretim kalitesi yaklaşımı var mı? – lurscher

+0

Merhaba. Seçenek olan "-konum modeli" nin tarif edildiğini söyleyebilir misiniz? Onu "lli" için bulabilirim, ama "lli" "llc" değil. – beroal

İlgili konular