[GHC] #3242: ghci: can't load .so/.DLL for: m (addDLL: could not load DLL)
GHC
ghc-devs at haskell.org
Sat Oct 31 12:32:26 UTC 2015
#3242: ghci: can't load .so/.DLL for: m (addDLL: could not load DLL)
---------------------------------+-----------------------------
Reporter: jeffz1 | Owner: Phyx-
Type: bug | Status: new
Priority: high | Milestone: 8.0.1
Component: GHCi | Version: 7.4.1
Resolution: | Keywords:
Operating System: Windows | Architecture: x86
Type of failure: None/Unknown | Test Case:
Blocked By: 3658 | Blocking:
Related Tickets: #7097 | Differential Rev(s):
Wiki Page: |
---------------------------------+-----------------------------
Comment (by Kludgy):
Great insight! I'm really looking forward to this patch. I presume
`findSysDll` is the new function?
Replying to [comment:40 Phyx-]:
> It seems the issue is caused by `findArchive` being unable to find any
archives that are shipped using the in-place `GCC`.
> - It works on Linux because `findArchive` would search the standard
Linux include path.
> - It works during compilation because `GCC` can find it's own libraries
(we explicitly tell it where to look for libraries using the `gcc` wrapper
around `realgcc`)
>
> So fixing the issue means using `searchForLibUsingGcc` in `findArchive`
as well, which will then find the correct file.
>
> The reason for the error as it is, is because if we can't locate the
library using any of the methods we have, we assume it is a system dll, or
something on the system search path. e.g. if trying to load
`kernel32.dll`.
>
> There is a slight issue in that the `GHCi` code (incorrectly) favors
`static archives` over `dynamic` ones
>
> {{{
> findDll `orElse`
> findArchive `orElse`
> tryGcc `orElse`
> tryGccPrefixed `orElse`
> assumeDll
> }}}
>
> This has the unwanted effect of when `kernel32` is specific as a lib, it
will try to load `kernel32.a` instead of `kernel32.dll`.
>
> To solve this I have added another search function that is able to
search the Windows search paths using `SearchPath` in order to find if it
is a dll on the system search path.
>
> The new search order is:
>
> {{{
> findDll `orElse`
> findSysDll `orElse`
> tryGcc `orElse`
> findArchive `orElse`
> assumeDll
> }}}
>
> (`tryGccPrefixed` was rolled into `tryGcc` so it is no longer needed at
top level)
>
> This seems to be working well, it is dependent on another patch of mine
so have to push that one through before this one. But patch coming soon.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/3242#comment:41>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list