caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Olivier Andrieu <oandrieu@nerim.net>
To: Florent Monnier <monnier.florent@gmail.com>
Cc: caml-list <caml-list@yquem.inria.fr>
Subject: Re: [Caml-list] exception not registered.Abandon
Date: Mon, 15 Mar 2010 10:13:03 +0100	[thread overview]
Message-ID: <95513601003150213q36a5435at93bf7c8a45549241@mail.gmail.com> (raw)
In-Reply-To: <201003132033.33849.monnier.florent@gmail.com>

On Sat, Mar 13, 2010 at 20:33, Florent Monnier
<monnier.florent@gmail.com> wrote:
> Le samedi 13 mars 2010 19:55:37, vous avez écrit :
>> On Sat, Mar 13, 2010 at 07:36:16PM +0100, Florent Monnier wrote:
>> > > > I have compiled a program using the native compiler, then when I run
>> > > > the executable I get this error message:
>> > > >
>> > > > exception not registered.Abandon
>> > > >
>> > > > Searching Google I don't find anything about this error message.
>> > > > How should I interpret it?
>> > >
>> > > Is the program linked to C code (apart from stdlib, I mean)?
>> >
>> > Yes it is.
>> > It's linked with OpenGL (only the GL lib, no GLU or anything esle) and
>> > SDL (through ocaml-sdl)
>> >
>> > It's a program that I try to switch the windowing part from Glut to SDL.
>> > With Glut it works alright.
>> >
>> > Also I've just seen that running in the interpreted mode instead of
>> > native code the program does run without any problem.
>> >
>> > Do these additional informations give you any clue?
>>
>> As Adrian said, it's from ocaml-SDL.  It's from one of several
>> functions which look like this:
>>
>>  static void
>>  sdlloader_raise_exception (char *msg)
>>  {
>>    static value *loader_exn = NULL;
>>    if(! loader_exn){
>>      loader_exn = caml_named_value("SDLloader_exception");
>>      if(! loader_exn) {
>>        fprintf(stderr, "exception not registered.");
>>        abort();
>>      }
>>    }
>>    raise_with_string(*loader_exn, msg);
>>  }
>>
>> Essentially you have to register OCaml exceptions before you can call
>> them from C, so it sounds like you're not calling some sort of SDL
>> "init" function (or calling it too late in your program).  Or possibly
>> there is a bug in the ocaml-SDL bindings.
>
> In the source of the sdlvideo.ml module there is:
>
> exception Video_exn of string
> let _ =
>  Callback.register_exception "SDLvideo2_exception" (Video_exn "")
>
> it seems for some reason that this code is not executed, because if I add at
> the beginning of my program (not in sdl source):
>
> let () =
>  (* notice the exception is prefixed with the name of the sdl module *)
>  Callback.register_exception "SDLvideo2_exception" (Sdlvideo.Video_exn "");
> ;;
>
> then I get the correct exception.
> I don't understand what the bug is.


It's (I think) the usual problem with library bindings where the
functions in the .mli are externals.
When your code contains only calls to externals of the module
(Sdlvideo), only the C part is linked in and not caml part (the .cmo).
The problem is that the important Callback.register_exception call is
in the caml part.

Solution: reference somewhere in your code a function that's declared
as "val" in the sdlvideo.mli.

cf. http://caml.inria.fr/mantis/view.php?id=4166 for instance

-- 
  Olivier


      reply	other threads:[~2010-03-15  9:13 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-13 16:42 Florent Monnier
2010-03-13 17:38 ` [Caml-list] " Richard Jones
2010-03-13 18:36   ` Florent Monnier
2010-03-13 18:50     ` Adrien
2010-03-13 18:55     ` Richard Jones
2010-03-13 18:57       ` Richard Jones
2010-03-13 19:33       ` Florent Monnier
2010-03-15  9:13         ` Olivier Andrieu [this message]

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=95513601003150213q36a5435at93bf7c8a45549241@mail.gmail.com \
    --to=oandrieu@nerim.net \
    --cc=caml-list@yquem.inria.fr \
    --cc=monnier.florent@gmail.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).