English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    
Browse thread
Dynlink native library for ocaml-mingw32
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: David Allsopp <dra-news@m...>
Subject: RE: [Caml-list] Dynlink native library for ocaml-mingw32
Paul Steckler wrote:
> I have a Fedora 11 instance where I've installed
> mingw32-ocaml-3.11.0-0.16.beta1.fc11.noarch to create Windows
> executables.  I've mentioned issues with the native-code threading
> libraries in that distribution before on this list.
> 
> Recently, I added calls into the dynlink library in my code (see my
> recent posts about dynlink-induced/revealed segfaults -- I'll discuss
> progress in resolving these in a future post).  When compiling with
> ocaml-mingw32, I first had to change the dynlink/META file to look for
> dynlink.cmxa to link against native code.  The link failed, though,
> because options -Wl and -E were being passed to FlexDLL.  I have
> mingw32-flexdll-0.11-9.fc11.i386 installed.
> 
> The file Makefile.config, found in the ocaml-mingw32 library
> directory, contains the line:
> 
>   NATDYNLINKOPTS=-Wl,-E

Makefile.config on an actual 3.11 MinGW installation does not contain NATDYNLINKOPTS, so this is incorrect. That's technically also a linker option wrapped in a gcc option...

> which options seem to get baked into dynlink.cmxa.  I hacked the
> library file to change those options to spaces, and the link proceeds
> normally.  That works, but my sleep patterns have become disturbed.
> :-)
> 
> Is this issue particular to my installation, or should dynlink.cmxa
> have been built not to invoke these flags?  Why does FlexDLL get
> invoked as the linker, rather than i686-pc-mingw32-ld (which would
> have accepted those flags)?

All linking is done using flexlink for Windows distributions of ocaml - in a highly simplified nutshell, flexlink builds some wrapper files which implement dynamic linking (not to be confused with dynlink - flexlink does this for all Windows executables) and then calls the correct compiler and linker to produce the final program/library. You can either use ocamlopt -verbose to see the flexlink call and then run it manually or use ocamlopt -verbose -ccopt -v to have flexlink display the programs it's invoking. Alain's website (http://alain.frisch.fr/flexdll.html) has more info on how it works...


David