Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Building cross compiler: pthread.h: No such file or directory

I'm currently trying to compile my own gcc 9.1.0 cross compiler for aarch64-linux-gnu target. I used this tutorial: https://wiki.osdev.org/GCC_Cross-Compiler

The compile progress for the gcc and g++ compiler seems to finish without errors, but allways when I try to compile libgcc with the command make all-target-libgcc I run into this error:

In file included from ../../../gcc-9.1.0/libgcc/gthr.h:148,
                 from ../../../gcc-9.1.0/libgcc/libgcov-interface.c:27:
./gthr-default.h:35:10: fatal error: pthread.h: No such file or directory
   35 | #include <pthread.h>
      |          ^~~~~~~~~~~
compilation terminated.

g++ --version on my build maschine prints:

g++ (GCC) 9.1.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

And my configuration command for gcc is: ../gcc-9.1.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --without-headers With:

export TARGET=aarch64-linux-gnu
export PREFIX=/opt/aarch64-linux-gnu

What do I forget?

like image 373
JulianH Avatar asked Oct 29 '25 02:10

JulianH


1 Answers

From GCC installation manual:

In order to build GCC, the C standard library and headers must be present for all target variants for which target libraries will be built (and not only the variant of the host C++ compiler).

So you need a libc for aarch64.

If you want to build it yourself, Preshing has a good article on the topic, which I haven't read in full but recommend anyway. He even has a picture mentioning both pthread.h and libgcc.a.

AFAIK, GCC can pick up a symlink to newlib sources and build it automatically during the course of building a full cross compiler with target libraries. Not sure about Glibc.

like image 167
Vladislav Ivanishin Avatar answered Oct 30 '25 17:10

Vladislav Ivanishin