No, I do have stdlib.h in the path. Here's the output of echo "" | gcc -E -x c - -v (*note that /home/linuxbrew is just a symlink to /scratch*): ... #include "..." search starts here: #include <...> search starts here: /home/linuxbrew/.linuxbrew/include /scratch/.linuxbrew/Cellar/gcc/7.2.0/bin/../lib/gcc/x86_64-pc-linux-gnu/7.2.0/include /scratch/.linuxbrew/Cellar/gcc/7.2.0/bin/../lib/gcc/x86_64-pc-linux-gnu/7.2.0/include-fixed /scratch/.linuxbrew/Cellar/gcc/7.2.0/bin/../lib/gcc/../../include ... and ls -l /home/linuxbrew/.linuxbrew/include/stdlib.h shows: lrwxrwxrwx 1 Tim users 37 Oct 23 12:27 /home/linuxbrew/.linuxbrew/include/stdlib.h -> ../Cellar/glibc/2.23/include/stdlib.h and ls -l /home/linuxbrew/.linuxbrew/Cellar/glibc/2.23/include/stdlib.h: -rw-r--r-- 1 Tim users 33K Feb 18 2016 /home/linuxbrew/.linuxbrew/Cellar/glibc/2.23/include/stdlib.h The situation here is that the tool chain I'm using comes from Linuxbrew but I can confirm all of them works with the Linuxbrew-provided gcc (version 5.5.0) but not the version (gcc 7.2.0) I compiled my self. For comparison, I'm posting the same output from the linuxbrew-provided gcc: ... #include "..." search starts here: #include <...> search starts here: /scratch/.linuxbrew/include /scratch/.linuxbrew/Cellar/gcc/5.5.0_1/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.5.0/include /scratch/.linuxbrew/Cellar/gcc/5.5.0_1/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.5.0/include-fixed /usr/local/include /scratch/.linuxbrew/Cellar/gcc/5.5.0_1/bin/../lib/gcc/../../include /usr/include ... It looks like the difference is the Linuxbrew-provided gcc seeks /usr/include for header and I can confirm that it's using the /usr/include/stdlib.h instead of the /scratch/.linuxbrew/include/stdlib.h (or equivalently /home/linuxbrew/.linuxbrew/include/stdlib.h). The question is: why gcc is not using the /scratch/.linuxbrew/include path for header? -- Sent from: http://gcc.1065356.n8.nabble.com/gcc-Help-f629689.html