Page 1 of 1

Cross GCC 4.9.4 cannot find its own header

Posted: Wed Mar 22, 2017 9:01 am
by Shamar
Hi, I have built a working cross toolchain using my custom libc (that is not standard compliant by design).

Now I want to port newlib to start porting POSIX software such as GCC.
I do not want newlib to be the default libc in my OS, just a sort of compatibility layer. Indeed the newlib implementation of the reentrant syscalls depends on my own libc.

However while building newlib I've noticed that my cross compiler is unable to find stddef.h and stdarg.h despite them being provided by the compiler itself and despite the fact that they are actually installed inside the

Code: Select all

$PREFIX/lib/gcc/x86_64/jehanne/4.6.9/include/stddef.h
folder.

After some tests with

Code: Select all

gcc -v
I realized that GCC is ignoring the said folder because it's looking in the wrong place: instead of

Code: Select all

$PREFIX/lib/gcc/x86_64/jehanne/4.6.9/include/stddef.h
it's looking into something like

Code: Select all

$SYSROOT/$PREFIX/lib/gcc/x86_64/jehanne/4.6.9/include/stddef.h
.

I've tried to remove the --with-sysroot from the GCC compilation script and/or to tweak the --prefix but without success.

What should I change to allow the cross GCC find it's own headers so that I do not need to manually copy them into the target system?

Re: Cross GCC 4.9.4 cannot find its own header

Posted: Thu Mar 23, 2017 4:16 am
by Shamar
Note that by setting the CPATH environment variable to $CROSSGCC_PREFIX/lib/gcc/x86_64-jehanne/4.9.4/include:$CROSSGCC_PREFIX/lib/gcc/x86_64-jehanne/4.9.4/include-fixed everything works as expected so the problem seems related to how I did configured the cross compiler.

The include directory was needed for stddef.h and include-fixed was needed for limits.h.

Also, note that in the previous post for $PREFIX I meant the --prefix (same for CROSSGCC_PREFIX here) and for $SYSROOT I meant the --with-sysroot passed to configure while building the GCC cross compiler.