Re: Cross-compiled GCC 6.1.0 has "../lib" instead of "/usr/lib" in -print-search-dirs output

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 6/15/16, Matthew Fortune <Matthew.Fortune@xxxxxxxxxx> wrote:
> Alastair Hughes <hobbitalastair@xxxxxxxxx> writes:
>> I've cross compiled GCC 6.1.0 (target/build is mips, host is x86_64).
>
> This description does not match the log. The log is for: build=x86_64
> host/target=mips. The log shows the build system using a pre-installed
> x86_64->mips cross compiler when building libgcc/libstdc++.

My bad, I mixed that up...

>> The resulting compiler will not run as it cannot find cc1, because the
>> search dirs are incorrect; they are prefixed with "../lib" instead of
>> "/usr/lib" (eg instead of /usr/lib/gcc/mips-linux-musl/6.1.0/ ..., the
>> path is ../lib/gcc/mips-linux-musl/6.1.0/ ...).
>
> Can you show the full search paths that GCC tries?

install: ../lib/gcc/mips-linux-musl/6.1.0/
programs: =../lib/gcc/mips-linux-musl/6.1.0/:../lib/gcc/:../mips-linux-musl/bin/mips-linux-musl/6.1.0/:../mips-linux-musl/bin/
libraries: =../lib/gcc/mips-linux-musl/6.1.0/:../lib/gcc/:../mips-linux-musl/lib/mips-linux-musl/6.1.0/:../mips-linux-musl/lib/:../lib/mips-linux-musl/6.1.0/:../lib/:/lib/mips-linux-musl/6.1.0/:/lib/:/usr/lib/mips-linux-musl/6.1.0/:/usr/lib/

>> If the problem is not a configuration mistake, where would I look to
>> find out what could be the issue? Where does the GCC build process
>> determine/set what the search dirs should be?
>
> The search paths are constructed out of the prefix in this case as well
> as having a relative path as a fallback.
>
> The absolute path that you build GCC with (--prefix) will be searched
> first with lib/gcc/xyz suffixed otherwise the directory containing the
> GCC executable will be searched by suffixing ../ to get to the root of
> the toolchain and then lib/gcc/xyz.
>
> The latter form of searching only works if you invoke the 'main' GCC
> executable in <root>/bin/[mips-linux-musl-]gcc if you invoke the copy
> at <root>/mips-linux-musl/bin/gcc then the relative path will fail as
> that copy of gcc is 2 levels deep not 1 level.
>
> Hope that helps a bit,
> Matthew

Thanks Matthew!

I continued looking based on your explanation and discovered that the
issue appears to stem from running gcc with no PATH set (I was booting
directly into a shell script to simplify debugging). Without
investigating too deeply into gcc, it appears that gcc searches
through PATH to find itself; as PATH is unset, it cannot locate
itself.

I can reproduce in my development environment by running
  unset $PATH; bash -c "gcc -print-search-dirs"

It seems that gcc is not searching --prefix (set to /usr in this
case); is that the intended behavior?

Alastair Hughes



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux