[LLVMdev] How to create shared library using llvm-ld

Nick Lewycky nicholas at mxc.ca
Thu Sep 24 12:03:34 PDT 2009


gauss wrote:
> Hi, all. I am using llvm-gcc to compile some softwares, and compile them 
> with CFLAGS="-emit-llvm" to gernerate bitcode IR. Then I have to replace 
> normal */ld/* with */llvm-ld/*. Unfortunately, */llvm-ld/* doesn't 
> support */-shared/* option which is used to create a shared library. 
> I've also noticed that llvm-ld supports an option '-link-as-library' 
> which is used to generate static library file. It is helpless. Any 
> ideas? Thanks a lot. Gauss, 2009-09-23

Use the gold plugin: http://llvm.org/docs/GoldPlugin.html . Then 'ld 
-shared foo.bc' will work just as if foo.bc were a .o file.

If you don't want to (or can't) use gold for some reason, you'll need to 
a) run llvm-ld -link-as-library to produce a merged .bc
b) run llc -relocation-model=pic to produce a .s file
c) assemble and link it into a .so file (gcc -shared foo.s will work 
fine, or you can run 'as' and 'ld' yourself, though figuring out the 
options is a pain.)

but this route may give you slightly less optimization than using gold 
directly, for the reasons explained in 
llvm.org/docs/LinkTimeOptimization.html .

Alternately, you can implement the -shared flag for llvm-ld yourself, 
which does the same operations as the above list but without the need to 
run the individual commands.

Nick



More information about the llvm-dev mailing list