从LLVM位代码创build位置独立的目标文件

我有一个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在这里没有任何意义,只是用于后端。