caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Byte code and dynamic linking of C libraries
@ 2004-04-28 18:43 Yaron Minsky
  2004-04-28 19:31 ` Nicolas Cannasse
  2004-04-28 19:38 ` Markus Mottl
  0 siblings, 2 replies; 3+ messages in thread
From: Yaron Minsky @ 2004-04-28 18:43 UTC (permalink / raw)
  To: caml-list

I've got some code that dynamically links in a C library.  The code works
just fine when I compile to native code, but blows up when I compile to
bytecode.  Just to be clear, the dynamic linking I'm doing happens
entirely on the C side:  I've got a c library that is linked in
statically, and the dlopen and dlclose calls all happen within that C
library.  When I try this trick in bytecode, I get a segfault.

So, any ideas as to what I need to do to make dynamic linking and byte
code to play nicely together?

Yaron


|--------/            Yaron M. Minsky              \--------|
|--------\ http://www.cs.cornell.edu/home/yminsky/ /--------|

Open PGP --- KeyID B1FFD916
Fingerprint: 5BF6 83E1 0CE3 1043 95D8 F8D5 9F12 B3A9 B1FF D916

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


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

* Re: [Caml-list] Byte code and dynamic linking of C libraries
  2004-04-28 18:43 [Caml-list] Byte code and dynamic linking of C libraries Yaron Minsky
@ 2004-04-28 19:31 ` Nicolas Cannasse
  2004-04-28 19:38 ` Markus Mottl
  1 sibling, 0 replies; 3+ messages in thread
From: Nicolas Cannasse @ 2004-04-28 19:31 UTC (permalink / raw)
  To: Yaron Minsky, caml-list

> I've got some code that dynamically links in a C library.  The code works
> just fine when I compile to native code, but blows up when I compile to
> bytecode.  Just to be clear, the dynamic linking I'm doing happens
> entirely on the C side:  I've got a c library that is linked in
> statically, and the dlopen and dlclose calls all happen within that C
> library.  When I try this trick in bytecode, I get a segfault.
>
> So, any ideas as to what I need to do to make dynamic linking and byte
> code to play nicely together?

Is the C library you're dynlinking is using Caml API ?
I got such problems, because when linking (under windows) to ocamlrun.lib,
your C dll is referencing ocamlrun.dll wich is the caml api library for the
bytecode interpreter (before it was ocamlrun.exe but now it's a separate dll
so the custom mode works well since both the exe and the dll are using the
same code).
The solution I know is to link staticly all the C librairies in native code.
One other is that your dynlinked C library redirects its calls to the Caml
API through the C library which is loading it.

Regards,
Nicolas Cannasse

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


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

* Re: [Caml-list] Byte code and dynamic linking of C libraries
  2004-04-28 18:43 [Caml-list] Byte code and dynamic linking of C libraries Yaron Minsky
  2004-04-28 19:31 ` Nicolas Cannasse
@ 2004-04-28 19:38 ` Markus Mottl
  1 sibling, 0 replies; 3+ messages in thread
From: Markus Mottl @ 2004-04-28 19:38 UTC (permalink / raw)
  To: Yaron Minsky; +Cc: caml-list

On Wed, 28 Apr 2004, Yaron Minsky wrote:
> I've got some code that dynamically links in a C library.  The code
> works just fine when I compile to native code, but blows up when I
> compile to bytecode.

Hm, this may indicate that one of your C-functions accessed from OCaml
takes more than five arguments.  In this case you'll have to write a
wrapper that uses argument vectors.  E.g.:

  CAMLprim value pcre_exec_stub_bc(value *argv, int argn)
  {
    return pcre_exec_stub(argv[0], argv[1], argv[2], argv[3],
                          argv[4], argv[5], argv[6]);
  }

The external declaration in OCaml then looks as follows (note the two
entry points for byte- and native code):

  external unsafe_pcre_exec :
    irflag -> regexp -> int -> string ->
    int -> int array -> callout option
    -> unit = "pcre_exec_stub_bc" "pcre_exec_stub"
              ------------------- ----------------

Earlier OCaml-releases didn't check the number of arguments, but I'm not
sure whether you'll have to grab a CVS-version to be warned about this
(if this is the cause of the problem)?

> Just to be clear, the dynamic linking I'm doing happens
> entirely on the C side:  I've got a c library that is linked in
> statically, and the dlopen and dlclose calls all happen within that C
> library.  When I try this trick in bytecode, I get a segfault.
> 
> So, any ideas as to what I need to do to make dynamic linking and byte
> code to play nicely together?

I can't imagine any good reason why dynamic linking performed at runtime
by C-code should have an effect on the byte code interpreter.  But maybe
there are bad ones?

Markus

-- 
Markus Mottl          http://www.oefai.at/~markus          markus@oefai.at

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


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

end of thread, other threads:[~2004-04-28 19:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-04-28 18:43 [Caml-list] Byte code and dynamic linking of C libraries Yaron Minsky
2004-04-28 19:31 ` Nicolas Cannasse
2004-04-28 19:38 ` Markus Mottl

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).