Le 07/03/2013 19:51, Matt Burgess a écrit :
> On Thu, 2013-03-07 at 14:57 +0100, Pierre Labastie wrote:
>
>> Please add --with-sysroot to the configure switches in binutils-pass2.
>> It is harmless (just adds a feature to ld), and corrects that bug.
> I think you meant --with-build-sysroot, right?  The configure help
> output for that says
>
> --with-build-sysroot=SYSROOT
>           use sysroot as the system root during the build
>
> So, I assume just '--with-build-sysroot' is enough, i.e. setting it to a
> null value? I still don't understand what that flag does and why/how it
> fixes this issue.  More importantly, I don't understand if it will
> affect our builds in any other way.
>
> I'll see if I can dig out some docs, but if anyone knows in the mean
> time, I'm all ears.
>
I really meant --with-sysroot. That switch is defined in ld's configure,
not the top one.
(it might be better to use --with-sysroot=/, but --with-sysroot
works for me).
It changes the behavior of ld:
from "man ld":
-rpath=dir
            Add a directory to the runtime library search path.  This is 
used
            when linking an ELF executable with shared objects.  All -rpath
            arguments are concatenated and passed to the runtime linker, 
which
            uses them to locate shared objects at runtime.  The -rpath 
option
            is also used when locating shared objects which are needed by
            shared objects explicitly included in the link; see the 
description
            of the -rpath-link option.  If -rpath is not used when 
linking an
            ELF executable, the contents of the environment variable
            "LD_RUN_PATH" will be used if it is defined.
[...]
-rpath-link=dir
            When using ELF or SunOS, one shared library may require another.
            This happens when an "ld -shared" link includes a shared 
library as
            one of the input files.

            When the linker encounters such a dependency when doing a non-
            shared, non-relocatable link, it will automatically try to 
locate
            the required shared library and include it in the link, if it is
            not included explicitly.  In such a case, the -rpath-link option
            specifies the first set of directories to search.  The 
-rpath-link
            option may specify a sequence of directory names either by
            specifying a list of names separated by colons, or by appearing
            multiple times.

            This option should be used with caution as it overrides the 
search
            path that may have been hard compiled into a shared library. In
            such a case it is possible to use unintentionally a different
            search path than the runtime linker would do.

            The linker uses the following search paths to locate required
            shared libraries:

            1.  Any directories specified by -rpath-link options.

           2.  Any directories specified by -rpath options.  The difference
                between -rpath and -rpath-link is that directories 
specified by
                -rpath options are included in the executable and used at
                runtime, whereas the -rpath-link option is only effective at
                link time. Searching -rpath in this way is only supported by
                native linkers and cross linkers which have been configured
                with the --with-sysroot option.

            3.  On an ELF system, for native linkers, if the -rpath and
                -rpath-link options were not used, search the contents 
of the
                environment variable "LD_RUN_PATH".

            4.  On SunOS, if the -rpath option was not used, search any
                directories specified using -L options.

            5.  For a native linker, the search the contents of the 
environment
                variable "LD_LIBRARY_PATH".

            6.  For a native ELF linker, the directories in "DT_RUNPATH" or
                "DT_RPATH" of a shared library are searched for shared
                libraries needed by it. The "DT_RPATH" entries are 
ignored if
               "DT_RUNPATH" entries exist.

            7.  The default directories, normally /lib and /usr/lib.

            8.  For a native linker on an ELF system, if the file
                /etc/ld.so.conf exists, the list of directories found in 
that
                file.
-----------------------------
Conclusion: gcc uses rpath, but rpath is used to search a shared object
required by another one only if the linker has been configured with
--with-sysroot. If nothing else is specified, it uses /etc/ld.so.conf,
which points to the host libraries, and that is the source of the bug.
-- 
http://linuxfromscratch.org/mailman/listinfo/lfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to