[Scons-users] SCons always uses relative path even when absolute path is set with LIBPATH

Matthew Bernard matt.s.bernard at gmail.com
Sun May 27 16:20:50 EDT 2018


I will try once I get to my computer. I can be on in about 30 minutes I am
away from the computer at the moment.

On Sun, May 27, 2018 at 4:18 PM Bill Deegan <bill at baddogconsulting.com>
wrote:

> or at least gets the -W-l... flag on your command line.
> (can you hop on the IRC channel?)
>
> On Sun, May 27, 2018 at 1:18 PM, Bill Deegan <bill at baddogconsulting.com>
> wrote:
>
>> O.k try adding this:
>> env['__RPATH'] = '$_RPATH'
>>
>> See if that resolves it.
>>
>>
>> On Sun, May 27, 2018 at 1:12 PM, Matthew Bernard <
>> matt.s.bernard at gmail.com> wrote:
>>
>>> GFortran (as a part of the gcc suite) is compiled  from the MOOSE
>>> framework which is the external application that my code is being merged
>>> with.
>>>
>>> They exclusively use Make but my application is mostly Fortran so we
>>> really rely on scons to resolve the dependencies.
>>>
>>> On Sun, May 27, 2018 at 4:07 PM Bill Deegan <bill at baddogconsulting.com>
>>> wrote:
>>>
>>>> How are you installing gfortran on your mac? macports? brew? other?
>>>> (trying to replicated your environment)
>>>>
>>>> On Sun, May 27, 2018 at 12:32 PM, Matthew Bernard <
>>>> matt.s.bernard at gmail.com> wrote:
>>>>
>>>>> Yep. That’s right. That would resolve my issue by letting the external
>>>>> application link my code and its  dependent libraries from where the
>>>>> external
>>>>> Application is compiling.
>>>>>
>>>>> Thanks for spending time on this.
>>>>> Matt
>>>>>
>>>>> On Sun, May 27, 2018 at 2:46 PM Bill Deegan <bill at baddogconsulting.com>
>>>>> wrote:
>>>>>
>>>>>> It looks like you want the following in your command line for linking
>>>>>> the shared library:
>>>>>>
>>>>>> gfortran -Wl,-rpath,$RPATH -o build/dynamic_lib/libdynamic_lib.dylib
>>>>>> -dynamiclib [objectfiles]  -Lbuild/common -lcommon
>>>>>>
>>>>>> Does that sound right?
>>>>>> (Where your RPATH is an absolute path)
>>>>>>
>>>>>> On Sun, May 27, 2018 at 11:35 AM, Matthew Bernard <
>>>>>> matt.s.bernard at gmail.com> wrote:
>>>>>>
>>>>>>> My problem is that rather than using scons to build an application
>>>>>>> as we did in the past, I am now building a set of shared libraries for an
>>>>>>> external application to reference. Scons is linking all of the libraries
>>>>>>> together properly but because the dependent libraries are registered with a
>>>>>>> relative path based on where the sconstruct file is, the external
>>>>>>> application fails to properly link the libraries.
>>>>>>>
>>>>>>>
>>>>>>> The external application can properly reference everything through
>>>>>>> the -L flag as you said, but the top level shared library (which we used to
>>>>>>> just compile as an application) can’t find its dependent libraries which is
>>>>>>> resolved if the files are registered with an absolute path.
>>>>>>>
>>>>>>> We would prefer not to resort to using LD_ Library_path as it is not
>>>>>>> secure and we will be installing this code onto clusters once these build
>>>>>>> problems are resolved so we will not have the ability to control those
>>>>>>> flags anyway.
>>>>>>>
>>>>>>> I know it is an odd use case but I would really prefer to keep using
>>>>>>> scons for this special case because we have built up a large set of
>>>>>>> supported configurations for our code when compiling a application. If it
>>>>>>> isn’t possible to do this through input, could you point me at the part of
>>>>>>> scons that normalizes path strings?
>>>>>>>
>>>>>>> Thanks
>>>>>>> Matt
>>>>>>>
>>>>>>> On Sun, May 27, 2018 at 1:57 PM Bill Deegan <
>>>>>>> bill at baddogconsulting.com> wrote:
>>>>>>>
>>>>>>>> What's the proper flag to specify RPATH?
>>>>>>>>
>>>>>>>> On Fri, May 25, 2018 at 12:52 PM, Mats Wichmann <mats at wichmann.us>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> On 05/25/2018 12:08 PM, Matthew Bernard wrote:
>>>>>>>>> > That's right. in the sconscript I assign a build directory
>>>>>>>>> variable to be:
>>>>>>>>> > common_build_dir = '/Users/..../sConstructDir/build/common'
>>>>>>>>> >
>>>>>>>>> > and then in the sharedlibrary call my code is
>>>>>>>>> >
>>>>>>>>> >     tpr_lib = env.SharedLibrary(target = 'dynamic_lib',
>>>>>>>>> >                                 source = srcs,
>>>>>>>>> >                                 LIBS = 'common',
>>>>>>>>> >                                 LIBPATH= common_build_dir,
>>>>>>>>> >                                 RPATH = common_build_dir
>>>>>>>>> >                                )
>>>>>>>>> >
>>>>>>>>> > so that during the linker stage I would expect to see
>>>>>>>>> >
>>>>>>>>> > gfortran -o build/dynamic_lib/libdynamic_lib.dylib -dynamiclib
>>>>>>>>> [object
>>>>>>>>> > files]  -L/Users/..../sConstruct/build/common -lcommon
>>>>>>>>> >
>>>>>>>>> > but during the linker stage in the build-cmds output it is
>>>>>>>>> reported as
>>>>>>>>> >
>>>>>>>>> > gfortran -o build/dynamic_lib/libdynamic_lib.dylib -dynamiclib
>>>>>>>>> [object
>>>>>>>>> > files]  -Lbuild/common -lcommon
>>>>>>>>>
>>>>>>>>> Having trouble understanding what the problem is... why do you
>>>>>>>>> want to
>>>>>>>>> put an rpath into the library in the first place? that means you're
>>>>>>>>> hardcoding a place the dynamic linker will look for the library's
>>>>>>>>> own
>>>>>>>>> library dependencies - at runtime.  If you made that the same as
>>>>>>>>> your
>>>>>>>>> build location, that means the final binary will always need that
>>>>>>>>> build
>>>>>>>>> area to be present, or the libraries won't be found. Unlikely to be
>>>>>>>>> right for production.  This is nothing to do with scons, and
>>>>>>>>> nothing to
>>>>>>>>> do with whether the rpath is relative or absolute, although
>>>>>>>>> arguably the
>>>>>>>>> problem is more complex if it's relative.  If you use an rpath, it
>>>>>>>>> should point to the place where the libraries are going to be
>>>>>>>>> /installed/, not where they're built.  This has nothing to do with
>>>>>>>>> finding the dependent libraries at link time - when you do your
>>>>>>>>> second
>>>>>>>>> link in the project using Make.  That link has to have -L
>>>>>>>>> instructions
>>>>>>>>> to point to where to find those libraries for linking purposes.
>>>>>>>>>
>>>>>>>>> I know the Mac has funky extra stuff, look up @executable_path.
>>>>>>>>> Not a
>>>>>>>>> Mac user so don't know what's going on with that.  Otherwise,
>>>>>>>>> instead of
>>>>>>>>> rpath you can use LD_LIBRARY_PATH (with caution) on linux,
>>>>>>>>> DYLD_LIBRARY_PATH and DYLD_FALLBACK_LIBRARY_PATH on Mac.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Scons-users mailing list
>>>>>>>>> Scons-users at scons.org
>>>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Scons-users mailing list
>>>>>>>> Scons-users at scons.org
>>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Scons-users mailing list
>>>>>>> Scons-users at scons.org
>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Scons-users mailing list
>>>>>> Scons-users at scons.org
>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Scons-users mailing list
>>>>> Scons-users at scons.org
>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>
>>>>>
>>>> _______________________________________________
>>>> Scons-users mailing list
>>>> Scons-users at scons.org
>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20180527/d2531b69/attachment-0001.html>


More information about the Scons-users mailing list