构建交叉编译器:pthread.h:无此类文件或目录

时间:2019-05-20 17:21:02

标签: linux gcc makefile g++

我目前正在尝试为aarch64-linux-gnu目标编译自己的gcc 9.1.0交叉编译器。我使用了本教程:https://wiki.osdev.org/GCC_Cross-Compiler

gcc和g ++编译器的编译进度似乎已完成,没有错误,但是当我尝试使用命令libgcc编译make all-target-libgcc时,总会遇到以下错误:

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在我的机器上打印:

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.

我对gcc的配置命令是: ../gcc-9.1.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --without-headers 使用:

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

我会忘记什么?

1 个答案:

答案 0 :(得分:0)

从GCC安装手册:

  

为了构建GCC,C标准库和标头必须为    对于所有目标库都存在的目标变体    内置的(不仅是宿主C ++编译器的变体)。

因此,您需要aarch64的libc。

如果您想自己构建它,Preshing在该主题上有一个不错的article,尽管我没有完整阅读,但是仍然推荐。他甚至还有一张同时提到pthread.hlibgcc.a的图片。

AFAIK,GCC可以选择到newlib源的符号链接,并在使用目标库构建完整的交叉编译器的过程中自动构建它。不确定Glibc。