Dynamic libraries and GHCi
John Lato
jwlato at gmail.com
Thu May 20 08:29:22 EDT 2010
On Thu, May 20, 2010 at 1:07 PM, Brandon S. Allbery KF8NH
<allbery at ece.cmu.edu> wrote:
> On May 20, 2010, at 06:23 , Simon Marlow wrote:
>>
>> On 18/05/2010 17:48, John Lato wrote:
>>>>
>>>> From: Simon Marlow<marlowsd at gmail.com>
>>>>>
>>>>> But currently there is one problem with "GhcShared=YES": with this
>>>>> option, the stage-2 compiler gets linked dynamically but the
>>>>> corresponding inplace shell wrapper does not set (DY)LD_LIBRARY_PATH,
>>>>> thus ./inplace/bin/ghc-stage2 doesn't run at all. I could work around
>>>>> this by manually symlinking all the dynamic libraries to ./inplace/lib
>>>>> and setting (DY)LD_LIBRARY_PATH to there, but obvisouly there should
>>>>> be a solution better than this.
>>>>
>>>> On Linux we link the binary using -rpath (I know OS X doesn't have
>>>> -rpath). This is another issue we need to resolve before we can switch
>>>> to a dynamically-linked GHCi.
>>>
>>> When you say OSX doesn't have -rpath, do you mean there's some problem
>>> with using -rpath on OSX? I have code that links to a 3rd-party
>>> library (libcudart.dylib) at runtime and it seems to use -rpath fine.
>>> This is with ghc-6.12.1.
>>
>> It was my understanding that OS X doesn't have -rpath from reading
>>
>> http://hackage.haskell.org/trac/ghc/wiki/SharedLibraries/Management
>>
>> and from what I remember Mac people saying in the past. Or maybe they
>> were just saying that -rpath is not the right thing on OS X because
>> libraries themselves have paths baked in.
>
>
> The latter. Also, I'd recommend DYLD_FALLBACK_LIBRARY_PATH per Apple
> recommendations, as you can otherwise get weird results.
Apparently -rpath was only added in 10.5, so the former was previously
true also. According to the ld manpage, -rpath only has an effect
when the library's load path begins with @rpath/, which seems to break
the usual OS X loading scheme so you then have to use -rpath.
According to the dyld docs, it looks like -rpath is meant to be used
as a last resort when other mechanisms aren't feasible. In
particular, "The use of @rpath is most useful when you have a
complex directory structure of programs and dylibs which can be
installed anywhere, but keep their relative positions." [1]
I suppose I'd agree that it's best avoided on OSX if it can be helped.
John
[1] http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/dyld.1.html#//apple_ref/doc/man/1/dyld
More information about the Glasgow-haskell-users
mailing list