Problem exporting Haskell to C via a DLL in GHC 6.6
Brian Hulley
brianh at metamilk.com
Thu Feb 8 18:07:54 EST 2007
Simon Peyton-Jones wrote:
> I don't think there is any reason in principle why GHC can't generate
> DLLs that "just work", but plainly it's deficient at the moment.
The fundamental reason is that the DLL mechanism itself doesn't allow
initialization/ shutdown do be hidden from the user of a DLL, because the
order of loading/unloading DLLs is unspecified by the MS Windows operating
system. Therefore it's not a GHC problem - it's just a fact of life with
DLLs...
> The other thing is that we could do with more "how to" documentation
> about GHC and DLLs. We have a bit here:
> http://haskell.org/haskellwiki/GHC/Using_the_FFI
> Could you expand it in the light of your experience?
I've added a section
http://haskell.org/haskellwiki/GHC/Using_the_FFI#Beware_of_DllMain.28.29.21
which attempts to explain why init/exit code can't be put in DllMain, as
well as an *untested* example to show what I meant by putting init/exit code
in Begin/End functions instead.
I've put a note next to the example to say that it's untested, and to appeal
to anyone with more knowledge of static linking between Haskell and C to fix
anything I've missed or replace with a better example. (Apologies for not
testing it but static linking to stubs generated by GHC seems to require the
DLL to be compiled by gcc and use of gcc on Windows seems to require Cygwin
since gcc doesn't seem to understand Windows paths and I don't have Cygwin
installed - unfortunately at the moment I don't have time to pursue this
further.)
Best regards, Brian.
--
http://www.metamilk.com
More information about the Glasgow-haskell-users
mailing list