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