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

Mats Wichmann mats at wichmann.us
Fri May 25 15:52:35 EDT 2018


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.





More information about the Scons-users mailing list