question about sysroot and Windows->Linux cross ld

Hans-Peter Nilsson hp@bitrange.com
Wed Jan 17 20:48:00 GMT 2018


On Wed, 17 Jan 2018, Joel Brobecker wrote:
> Hello,
>
> We are working on a a Windows-to-Linux compiler, and we noticed
> something with respect to shared library linking which looks like
> it might be a bug, and we'd like to have your opinion before we go
> too deep into trying to solve this.
>
> We created a sysroot on the host by copying the various headers
> and libraries from our target. We then passed that sysroot to
> the compiler using --sysroot=/path/to/sysroot.
>
> A cross-compiler hosted on GNU/Linux is able to link a program fine,
> but the same cross-compiler hosted on Windows fails to link with
> the following error:
>
>    | c:/[...]/gcc/install/bin/../libexec/gcc/powerpc-generic-linux-gnu/6.4.1/ld.exe: cannot find //lib/libc.so.6
>    | c:/[...]/gcc/install/bin/../libexec/gcc/powerpc-generic-linux-gnu/6.4.1/ld.exe: cannot find //lib/libc_nonshared.a
>    | c:/[...]/gcc/install/bin/../libexec/gcc/powerpc-generic-linux-gnu/6.4.1/ld.exe: cannot find //lib/ld.so.1
>    | collect2.exe: error: ld returned 1 exit status

>    | GROUP ( //lib/libc.so.6 //lib/libc_nonshared.a  AS_NEEDED ( //lib/ld.so.1 ) )

> Any opinion on this? We'll investigate the problem, but it would
> help us if we knew that we're trying to achieve the correct result :).

I suggest having a look at the "#if defined (_WIN32) &&
!defined (__CYGWIN32__) *slash = ..." thing in ldfile.c.

Obviously, maybe also find out where the "//" comes from.  I'm
guessing that's supposed to be "/" (maybe somewhere, a
"sysroot=/" vs. "sysroot=" foulup) and may be handled
differently in "Windows" compared to "Linux" when found at the
start or inside (prepended by the sysroot) a path.

brgds, H-P



More information about the Binutils mailing list