caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* OCaml and C code in a dynamic library
@ 2007-03-29 22:22 Joel Reymont
  2007-03-29 23:26 ` [Caml-list] " Pablo Polvorin
  0 siblings, 1 reply; 3+ messages in thread
From: Joel Reymont @ 2007-03-29 22:22 UTC (permalink / raw)
  To: Caml List

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/






^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] OCaml and C code in a dynamic library
  2007-03-29 22:22 OCaml and C code in a dynamic library Joel Reymont
@ 2007-03-29 23:26 ` Pablo Polvorin
  2007-04-03  8:15   ` Richard Jones
  0 siblings, 1 reply; 3+ messages in thread
From: Pablo Polvorin @ 2007-03-29 23:26 UTC (permalink / raw)
  To: Joel Reymont; +Cc: Caml List

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",
    NULL
  };
  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:
http://caml.inria.fr/pub/ml-archives/caml-list/2002/09/0d8daa135bd30302f1ebf30daf9a0ed9.en.html
http://caml.inria.fr/pub/ml-archives/caml-list/2002/01/44d30c5454106646098bf00977c66796.en.html
http://caml.inria.fr/pub/ml-archives/caml-list/2001/12/e9e89dadd773729481bf8446f1b73b64.en.html

and also the manual pages
http://caml.inria.fr/pub/docs/manual-ocaml/manual032.html

regards,
pablo.




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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] OCaml and C code in a dynamic library
  2007-03-29 23:26 ` [Caml-list] " Pablo Polvorin
@ 2007-04-03  8:15   ` Richard Jones
  0 siblings, 0 replies; 3+ messages in thread
From: Richard Jones @ 2007-04-03  8:15 UTC (permalink / raw)
  To: Pablo Polvorin; +Cc: Joel Reymont, Caml List

On Thu, Mar 29, 2007 at 08:26:59PM -0300, Pablo Polvorin wrote:
> 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.

Sorry for late reply - I seem to have missed this the first time
around.  There is an open bug on this issue:

http://caml.inria.fr/mantis/view.php?id=3866

Rich.

-- 
Richard Jones
Red Hat


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-04-03  8:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-29 22:22 OCaml and C code in a dynamic library Joel Reymont
2007-03-29 23:26 ` [Caml-list] " Pablo Polvorin
2007-04-03  8:15   ` Richard Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).