[GHC] #11072: Runtime linker doesn't search for DLLs referenced in import libraries on Windows
GHC
ghc-devs at haskell.org
Sun Apr 17 11:04:23 UTC 2016
#11072: Runtime linker doesn't search for DLLs referenced in import libraries on
Windows
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: Phyx-
Type: feature request | Status: patch
Priority: normal | Milestone: 8.0.2
Component: Compiler | Version: 7.10.2-rc2
(Linking) |
Resolution: | Keywords:
Operating System: Windows | Architecture:
| Unknown/Multiple
Type of failure: Runtime crash | Test Case: T11072gcc
| T11072msvc
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1564
Wiki Page: | Phab:D1696
-------------------------------------+-------------------------------------
Comment (by Tamar Christina <tamar@…>):
In [changeset:"97f2b16483aae28dc8fd60b6d2e1e283618f2390/ghc" 97f2b16/ghc]:
{{{
#!CommitTicketReference repository="ghc"
revision="97f2b16483aae28dc8fd60b6d2e1e283618f2390"
Add Windows import library support to the Runtime Linker
Summary:
Import libraries are files ending in `.dll.a` and `.lib` depending on
which
compiler creates them (GCC, vs MSVC).
Import Libraries are standard `archive` files that contain object files.
These object files can have two different formats:
1) The normal COFF Object format for object files
(contains all ascii data and very little program code, so do not
try to execute.)
2) "short import" format which just contains a symbol name and
the dll in which the symbol can be found.
Import Libraries are useful for two things:
1) Allowing applications that don't support dynamic linking to
link against the import lib (non-short format) which then
makes calls into the DLL by loading it at runtime.
2) Allow linking of mutually recursive dlls. if `A.DLL` requires
`B.DLL` and vice versa, import libs can be used to break the cycle
as they can be created from the expected exports of the DLLs.
A side effect of having these two capabilities is that Import libs are
often
used to hide specific versions of DLLs behind a non-versioned import lib.
e.g. GCC_S.a (non-conventional import lib) will point to the correct
`libGCC` DLL. With this support Windows Haskell files can now just link
to `-lGCC_S` and not have to worry about what the actual name of libGCC
is.
Also third party libraries such as `icuuc` use import libs to forward to
versioned DLLs. e.g. `icuuc.lib` points to `icuuc51.dll` etc.
Test Plan:
./validate
Two new tests added T11072gcc T11072msvc
Two binary files have been added to the test folder because the "short"
import library format doesn't seem to be creatable via `dlltool`
and requires Microsoft's `lib.exe`.
Reviewers: bgamari, RyanGlScott, erikd, goldfire, austin, hvr
Reviewed By: RyanGlScott, erikd
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D1696
GHC Trac Issues: #11072
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11072#comment:20>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list