[GHC] #8266: Dynamic linking on Mac
GHC
ghc-devs at haskell.org
Sat Nov 30 09:12:27 UTC 2013
#8266: Dynamic linking on Mac
--------------------------------------------+------------------------------
Reporter: kazu-yamamoto | Owner:
Type: bug | thoughtpolice
Priority: highest | Status: closed
Component: Build System | Milestone: 7.8.1
Resolution: fixed | Version: 7.7
Operating System: MacOS X | Keywords:
Type of failure: GHC doesn't work at all | Architecture:
Test Case: | Unknown/Multiple
Blocking: | Difficulty: Unknown
| Blocked By:
| Related Tickets:
--------------------------------------------+------------------------------
Comment (by darchon):
I currently don't have my OS X machine, so I can't make the patch right
now. But the patch should be "straightforward": just make OS X (MACH-O)
behave the same way as Linux (ELF). I guess this whole mess started in the
first place because MACH-O only has absolute paths to dynamic libraries.
Currently on OS X there's a single point of reference, an `@rpath`, that's
pointing to a `lib/` directory, and expecting all libraries bundled with
GHC to be there. This should be changed to multiple `@rpath`s. So the
current situation looks like this:
{{{
-- Installed by GHC install
@rpath/package1-package1version/package1.dylib
@rpath/package2-package1version/package2.dylib
@rpath/package3-package1version/package3.dylib
-- Installed by Cabal
/absolute_path_to_library/package4.dylib
/absolute_path_to_library/package5.dylib
}}}
Where a executable gets an `@rpath` pointing to the same location as the
value of `ghc --print-libdir`. With the exception of the GHC binary, which
has an `@rpath` pointing to `@loader_path/..`.
The new situation should be:
{{{
-- Installed by GHC install
@rpath/package1.dylib
@rpath/package2.dylib
@rpath/package3.dylib
-- Installed by Cabal
@rpath/package4.dylib
@rpath/package5.dylib
}}}
Where:
* Libraries bundled with GHC should get, for all transitively depending
libraries, an `@rpath` pointing to `@loader_path/../dependentpackage/`
(similar to the situation on Linux, which uses
`$ORIGIN/../dependentpackage/`)
* The GHC executable should get, for all transitively depending libraries,
an `@rpath` pointing to `@loader_path/../dependentpackage/` (again similar
to Linux)
* Libraries installed by Cabal should get, for all transitively depending
library, an `@rpath` pointing to `/absolute_path_to_package` (similar to
linux)
* Executables should get, for all transitively depending libraries, an
`@rpath` pointing to `/absolute_path_to_package` (similar to linux)
This patch would involve adding a code-path for OS-X/MACH-O similar to
lines 1757-1776 in `compiler/main/DriverPipeline.hs`, and of course
changing `rules/relative-dynlib-references.mk`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8266#comment:30>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list