[LLVMdev] Linking with C Library

Jeffrey Yasskin jyasskin at google.com
Sun Apr 4 12:09:47 PDT 2010


In C, on Linux, you would have to link your JIT compiler with
-rdynamic or -Wl,-export-dynamic (they're synonyms). I'm not sure what
the equivalent linker flag is for OCaml.

You can see what symbols are available to the JIT with `nm -D`.

On Sun, Apr 4, 2010 at 8:41 AM, Nyx <mcheva at cs.mcgill.ca> wrote:
>
> I'm coding a JIT compiler for C source in OCaml, using LLVM. I'm pretty much
> done with the LLVM code generation. The problem is that I can't seem to call
> C library functions. I was told that all I needed to do to be able to link
> with libc functions was to declare them in my module and give them external
> linkage, but this does not seem to work. Please note that this is a JIT
> compiler. I am not generating a binary, but running the code generated in
> memory. It should be possible to dynamically link with the libc functions
> because the ocaml executable is linked with them.
>
> The three libc functions I declared appear in my module dump as such:
> declare i8* @malloc(i32)
> declare void @free(i8*)
> declare i32 @puts(i8*)
>
> However, when trying to run my program, I get the following:
> LLVM ERROR: Tried to execute an unknown external function: i32 (i8*)* puts
>
> I'm not quite sure how to go about this. Any help would be appreciated.
>
> - Maxime



More information about the llvm-dev mailing list