* [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