
#10352: Properly link Haskell shared libs on ELF systems -------------------------------------+------------------------------------- Reporter: duncan | Owner: Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 (Linking) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by Phyx-): * os: Linux => Unknown/Multiple Comment: I think this would work for Windows as well and would solve some issues with Dynamic linking there. For this to work on Windows we need a few things: name all the rts variants the same. e.g. `ghc-rts.dll` but place them in different folders: {{{ rts \ normal \ ghc-rts.dll \ threaded \ ghc-rts.dll \ profiled \ ghc-rts.dll }}} etc. We can then delay load the rts library. All the RTS versions should have the same ABI so that shouldn't be an issue. During compilation of a `.exe` we can then set the search path using `AddDllDirectory` to allow the loader to pick the correct `RTS` variants for the `.exe` and all the DLLs since they are all in the same process space as the `exe` and so will inherit the search path. For dynamic libraries we can override the `hs_init` function and do the same. I think we can use ld's `--wrap symbol` for this so existing code don't need any changing: http://ftp.gnu.org/pub/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html So I will re-classify this as being multiple platforms. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10352#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler