2013-04-13 4 views
5

У меня есть модуль llvm, который я сбросил в качестве файла биткода с llvm::WriteBitcodeToFile. Я хочу превратить этот файл в обычную динамически загружаемую библиотеку, содержащую функции в модуле.создать позицию независимого объектного файла из битового кода LLVM

Как это сделать? я попытался с помощью llc для этого, но это дает код, по-видимому, не является перемещаемым, поскольку после выполнения следующих действий:

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

затем, сборочные производства с гну as в объектный файл:

as -o mylib.o em.s 

наконец , пытаясь произвести общую библиотеку с:

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

завершается с ошибкой:

/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 

ответ

8

Вам необходимо настроить модель перемещения. Что-то вроде -llc -relocation-model = pic. Не используйте PIE, потому что это для исполняемых файлов, а не для библиотек. Кроме того, -cppgen не имеет никакого смысла здесь, это только для cpp.

+0

спасибо !!!!, есть ли инструмент для сборки библиотеки непосредственно из битового кода IR, не полагаясь на ассемблер? – lurscher

+0

Я видел, что llc поддерживает собственный код вывода, но он экспериментальный. Существует ли для этого подход к качеству продукции? – lurscher

+0

Привет. Не могли бы вы указать, где описывается опция «-оговор-модель»? Я могу найти его для «lli», но «lli» не «llc». – beroal

Смежные вопросы