[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
HTH,
--
Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu
More information about the llvm-dev
mailing list