caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "Nicolas Cannasse" <warplayer@free.fr>
To: "Robert Roessler" <roessler@rftp.com>, <caml-list@inria.fr>
Subject: Re: [Caml-list] ocamlopt and *using* DLLs
Date: Tue, 24 May 2005 14:06:19 +0900	[thread overview]
Message-ID: <001d01c5601e$531fb740$0d05a8c0@PWARP> (raw)
In-Reply-To: <4292A58D.207@rftp.com>

> I tried this on the beginners list, but may not have been asking the
> right question(s)... :)
>
> 1) Can DLLs appear as input to the ocamlopt compiler like they can
> with ocamlc?  The manual says "yes": "Arguments ending in .o, .a or y
> .so (.obj, .lib and .dll under Windows) are assumed to be C object
> files and libraries. They are linked with the program."
>
> I get "ocamlopt.opt: don't know what to do with ml_scintilla.dll."
>
> 2) If DLLs can in fact be used with ocamlopt, is the model the same as
> with ocamlc?  In particular,
>
> 2a) can I use them *without* stub libraries?
>
> 2b) can I in general expect that an app that works well with ocamlc
> and a collection of OCaml cma libs and compiled DLLs (LablGTK and
> associated runtime) will work with ocamlopt - assuming that I generate
> and replace cmo/cma files with cmx/cmxa files?
>
> Robert Roessler
> roessler@rftp.com
> http://www.rftp.com

I was not maybe clear enough on the beginner list :)
The main problem is that your DLL need to call Ocaml API, which it is linked
with.

In bytecode there is no problem since the whole API is inside ocamlrun.dll
so your DLL and ocamlrun.exe will simply use this API dll together.
In native compilation however there is no more ocamlrun.dll, since the API
is staticly linked into your executable. That means that your DLL that was
working in bytecode will load ocamlrun.dll and call it while your executable
is calling staticly linked API. This will result quite quickly in a crash
since ocamlrun.dll is not initialized correctly.

The only possible way to get the DLL working is to patch it so it loads its
API inside your.exe and not inside ocamlrun.dll. But then you will need a
different version of the DLL for each application (!). It would be nice if
OCaml could provide the equivalent of ocamlrun.dll for the native
compilation mode.

Nicolas Cannasse



  parent reply	other threads:[~2005-05-24  5:07 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-24  3:54 Robert Roessler
2005-05-24  4:29 ` [Caml-list] " Jacques Garrigue
2005-05-24  6:39   ` Robert Roessler
2005-05-24  7:10     ` Nicolas Cannasse
2005-05-27  1:50       ` Robert Roessler
     [not found]       ` <42967B63.8040408@rftp.com>
     [not found]         ` <02ce01c56355$14c93db0$19b0e152@warp>
2005-06-01 20:32           ` Robert Roessler
     [not found]             ` <0d4f01c56702$94853300$0300a8c0@DBLSYG61>
2005-06-02  4:24               ` Robert Roessler
2005-05-27  2:13   ` Robert Roessler
2005-05-27  8:17     ` Anatoly Zaretsky
2005-05-28  6:42       ` Nicolas Cannasse
2005-05-24  5:06 ` Nicolas Cannasse [this message]
2005-05-27  1:50   ` Robert Roessler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='001d01c5601e$531fb740$0d05a8c0@PWARP' \
    --to=warplayer@free.fr \
    --cc=caml-list@inria.fr \
    --cc=roessler@rftp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).