Browse thread
exception not registered.Abandon
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Florent Monnier <monnier.florent@g...> |
| Subject: | Re: [Caml-list] exception not registered.Abandon |
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.