我有一个llvm模块,我已经转储为llvm::WriteBitcodeToFile
码文件。 我想把这个bitcode文件转换成一个包含模块中函数的本地dynamic加载库。
我该怎么做呢? 我试着使用这个llc
,但是这产生的代码显然是不可重新定位的,因为在执行以下步骤之后:
llc -enable-pie -cppgen=functions -filetype=asm executableModule -o em.s
然后用gnu汇编成一个目标文件:
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
您需要设置重定位模型。 像-llc -relocation-model = pic。 不要使用PIE,因为它是用于可执行文件,而不是用于库。 另外,-cppgen在这里没有任何意义,只是用于后端。