English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
OCaml and C code in a dynamic library
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2007-03-29 (23:27)
From: Pablo Polvorin <pablo.polvorin@g...>
Subject: Re: [Caml-list] OCaml and C code in a dynamic library
Hi Joel,
i recently make a dynamic library including c++ wrappers to an ocaml
module, to be loaded as a SCA component by apache tuscany.
The first problem was that i have a 64b architecture, and in order to
link against libcamlrun in shared mode, a recompilation of the runtime
with -fPIC flag was necessary. I called the resulting library
libcamlrun_shared, to not confuse it with the original one.

Also you have to initialize the ocaml runtime from whiting you
library.., and for my best knowledge it is necessary to pass the path
to you .so to the caml_main function, like:

#define LIB_DIR "/home/pablo/ocaml/tproject/deploy/TuscanyCalculator"
  static char *argv[] = {
    LIB_DIR "/libTuscanyCalculatorImpl.so",
    LIB_DIR "/libTuscanyCalculatorImpl.so",
  caml_main (argv);

The way that work for my is to compile the c code with -c -fPIC flags,
 compile the ocaml modules also with -c , and then link all the object
codes together with  ocamlc -linkall -custom -cclib "-fPIC -shared
... and include the libraries you need ( -lcamlrun_shared  -ltermcap
in my system)

I think the best is to look at the makefile of the ocaml module for
the aol server http://www.crystalballinc.com/vlad/software/

or the apache mod_ocaml
http://merjis.com/developers/mod_caml , a lite more complex makefile.

also, look at these previous post in this area:

and also the manual pages


2007/3/29, Joel Reymont <joelr1@gmail.com>:
> Has anyone succeeded in wrapping OCaml code in a dynamic library for
> use in C?
> I can build a static OCaml library without any problems but when I
> try to package that and some other C code in a dynamic library I get
> errors like this on Mac OSX:
> /usr/bin/ld: ./libfib.a(fibcaml.o) has local relocation entries in
> non-writable section (__TEXT,__text)
> 	Thanks, Joel
> --
> http://wagerlabs.com/
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

Pablo Polvorin