2013-04-13 9 views
5

Mam moduł Llvm, który został zrzucony jako plik Bitcode z llvm::WriteBitcodeToFile. Chcę przekształcić ten plik Bitcode w natywną dynamicznie ładowaną bibliotekę, która zawiera funkcje w module.Utwórz plik obiektu niezależnego od pozycji z kodu bitowego LLVM

Jak to zrobić? Próbowałem za pomocą llc za to, ale to wywołuje kod, który najwyraźniej nie jest przenoszone, ponieważ po wykonaniu następujących czynności:

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

wtedy, Assemblying z gnu as do pliku obiektu:

as -o mylib.o em.s 

wreszcie , starając się stworzyć wspólną bibliotekę:

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

niepowodzeniem z błędem:

/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 

Odpowiedz

8

Musisz ustawić model relokacji. Coś takiego jak -llc -relocation-model = pic. Nie używaj PIE, ponieważ dotyczy plików wykonywalnych, a nie bibliotek. Również -cppgen nie ma tutaj żadnego sensu, jest to tylko dla zaplecza cpp.

+0

dziękuję !!!!, czy istnieje narzędzie do budowania biblioteki bezpośrednio z kodu bitowego IR, bez polegania na asembler? – lurscher

+0

Widziałem, że llc obsługuje wyjście kodu natywnego, ale jest eksperymentalne. Czy istnieje do tego podejście oparte na jakości produkcji? – lurscher

+0

Witam. Czy możesz powiedzieć, gdzie jest opisana opcja "-relocation-model"? Mogę go znaleźć dla "lli", ale "lli" nie jest "llc". – beroal

Powiązane problemy