Boost logo

Boost-Build :

Subject: Re: [Boost-build] Building on OSX with link=shared
From: Vladimir Prus (vladimir.prus_at_[hidden])
Date: 2016-01-21 01:38:51


On 19-Jan-16 7:43 AM, Ian Emmons wrote:
>> On Jan 15, 2016, at 2:27 PM, Robert Ramey <ramey_at_[hidden]> wrote:
>>
>> Does no one know how to do this? Have boost shared libraries ever been tested on OSX?
>>
>>
>> On 1/14/16 4:28 PM, Robert Ramey wrote:
>>> I'm trying to build and test the serialization library on my OSX
>>> machine. This works fine when I use link=static. But when I'm using
>>> link=shared - I get the following message.
>>>
>>> ../../../tools/library_status/library_test.sh -j4 toolset=clang-03
>>> variant=debug link=shared test_iterators >b2.log &
>>>
>>> dyld: Library not loaded: @rpath/libboost_filesystem.dylib
>>> Referenced from:
>>> /Users/robertramey/WorkingProjects/modular-boost/libs/serialization/test/../../../bin.v2/libs/serialization/test/test_iterators.test/clang-darwin-03/debug/test_iterators
>>>
>>> Reason: image not found
>>> Trace/BPT trap: 5
>>>
>>> It seems that the test programs are not finding the shared libraries
>>> being built.
>>>
>>> Does anyone know what the most convenient way to fix this is. If I
>>> recall, it used to work sometime ago.
>>>
>>> Robert Ramey
>
>
>
> Robert,
>
> Sorry for the delay, but I've been working too hard to check my home email for a few days.
>
> I ran into this problem recently as well. It seems to be related to changes in OSX made in the last major release, version 10.11, a.k.a. El Capitan. One set of changes went under the heading of System Integrity Protection (SIP) [1, 2]. Among the changes was disabling DYLD_LIBRARY_PATH and other environment variables related to the dynamic linker (dyld).
>
> I solved this by first building Boost's and my shared libraries in the normal way, and then using install_name_tool to change the install names of the resulting .so files. You can find discussions of install names, how they are used to load shared libraries, and how they can be changed in [3, 4, 5].
>
> I know that's not a simple recipe for success, but I hope it gets you on the right path.

Ian,

so it sounds like in order to run an executable that uses shared library X at path P, the install_name inside X should
be set to P prior to linking of the executable? And then, when installing library X to its final location, the
install_name should be changed again to its final install location?

I suppose it can be accomplished, although the number of gratuitous changes in El Capitan is quite ridiculous.

-- 
Vladimir Prus
http://vladimirprus.com

Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk