29
votes

I'm working on llvm OCaml bindings.

I installed llvm package through opam (opam install llvm), when I use llvm in utop, I get the following error:

#require "llvm";;
Error: The external function 'llvm_global_succ' is not available. 

The opam llvm version is 3.2.

I also tried building llvm3.3 from the official site (./configure --with-ocaml-libdir='ocamlc -where'), the build was successful (all the llvm command-line tools are working), but I got the same error in utop.

I'm on Mac OS 10.7.5.


Edit: I solved it..

ocamlmktop -o llvmtop llvm.cma -cc g++

Then launch llvmtop, you can use llvm bindings after open Llvm.

I haven't found an equivalent for utop yet..


Edit2: Now utop is working!

Thanks to the utop documentation here

  1. create a myutop_main.ml file:

    let () = UTop_main.main ()

  2. create a custom utop with llvm bindings:

    ocamlfind ocamlmktop -o llvmutop -thread -linkpkg -package utop -package llvm myutop_main.ml -cc g++

1
Since you've solved the problem yourself, please move your solution from the question into an answer and accept it so that this question is marked as answered.Misha Brukman
@xysun - can you cut your own answer from your question above, and paste it into an answer, and then mark it as answered? That way it will be removed from the Unanswered Questions list. Many Thanks. :-)Greenonline

1 Answers

2
votes

(as I'm asked to answer my own question...)

To use system toplevel

ocamlmktop -o llvmtop llvm.cma -cc g++

Then launch llvmtop, you can use llvm bindings after open Llvm.

I haven't found an equivalent for utop yet..


To use utop

Thanks to the utop documentation here

  1. create a myutop_main.ml file:

    let () = UTop_main.main ()

  2. create a custom utop with llvm bindings:

    ocamlfind ocamlmktop -o llvmutop -thread -linkpkg -package utop -package llvm myutop_main.ml -cc g++