[LLVMdev] Linking to native libraries

Misha Brukman brukman at uiuc.edu
Tue Jul 27 08:50:39 PDT 2004

On Tue, Jul 27, 2004 at 12:37:59PM -0300, Carlos Pita wrote:
> Ok, fine, and what about the interpreter? It takes 100% llvm, doesn't
> it? Or is there some kind of import facility (perhaps as an specially
> interpreted call or as an extension to llvm which makes the
> intrepreter dlopen the lib and map unresolved symbols in the llvm to
> those exported by the lib)?

The tool is `lli' but it serves a dual purpose: it is *both* an
interpreter and a JIT (just-in-time) compiler.  On architectures that we
have JIT support for (x86 and Sparc), it is orders of magnitude faster.

Having said that, yes, there is importa facility for loading dynamica
libraries, e.g.

  % lli -load=/usr/lib/libfunky.so program.bc

This will run the `program.bc' file and attempt to resolve references in
the .so file provided.  You can specify multiple such libraries, e.g.:

  % lli -load=/usr/lib/libfoo.so \
        -load=/usr/lib/libbar.so program.bc

If you run the compiler llvmgcc as follows:

  % llvmgcc program.c -L/usr/lib -lfoo -lbar -o program

then (assuming libfoo.so and libbar.so are in /usr/lib), you will get
two files generated:

1. program.bc -- the compiled, optimized, 100% LLVM bytecode
2. program -- a shell script for running lli on program.bc and loading
   shared libraries that you specified

This means you can run the program as follows:

  % ./program

Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu

More information about the llvm-dev mailing list