1

我试图让llvm-gcc 4.2.2.9在这个运行 3.0.0-21-generic 内核的 x86_64 系统上编译。llvm 2.9 本身构建良好。我怀疑 llvm-gcc 的可下载版本引起了其他一些问题,所以我决定自己构建 llvm-gcc。

就像README.LLVM我配置的建议一样

../llvm-gcc-4.2-2.9.source/configure \
  --prefix=/opt/llvm-gcc4.2-2.9/../llvm-gcc4.2-2.9-install \
  --disable-multilib \
  --program-prefix=llvm- \
  --enable-llvm=/opt/llvm-2.9 \
  --host=x86_64-generic-linux-gnu
  --enable-languages=c,c++

我从/opt/llvm-gcc4.2-2.9目录中运行它,而源代码位于其中,/opt/llvm-gcc-4.2-2.9.source而我的 llvm 2.9 位于/opt/llvm-2.9. 请注意,我设置的是--host而不是--target因为这隐含地将 设置--target为相同的架构。

make最终在此错误处停止时确实会构建很多东西(产生大量警告):

make[3]: Entering directory `/opt/llvm-gcc4.2-2.9/gcc'
/opt/llvm-gcc4.2-2.9/./gcc/xgcc -B/opt/llvm-gcc4.2-2.9/./gcc/ -B/opt/llvm-gcc4.2-2.9/../llvm-gcc4.2-2.9-install/x86_64-generic-linux-gnu/bin/ -B/opt/llvm-gcc4.2-2.9/../llvm-gcc4.2-2.9-install/x86_64-generic-linux-gnu/lib/ -isystem /opt/llvm-gcc4.2-2.9/../llvm-gcc4.2-2.9-install/x86_64-generic-linux-gnu/include -isystem /opt/llvm-gcc4.2-2.9/../llvm-gcc4.2-2.9-install/x86_64-generic-linux-gnu/sys-include  -O2 -O2 -g -O2  -DIN_GCC    -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include  -I. -I. -I../../llvm-gcc-4.2-2.9.source/gcc -I../../llvm-gcc-4.2-2.9.source/gcc/. -I../../llvm-gcc-4.2-2.9.source/gcc/../include -I../../llvm-gcc-4.2-2.9.source/gcc/../libcpp/include  -I../../llvm-gcc-4.2-2.9.source/gcc/../libdecnumber -I../libdecnumber -I/opt/llvm-2.9/include  -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-toplevel-reorder  -fno-omit-frame-pointer -fno-asynchronous-unwind-tables \
      -c ../../llvm-gcc-4.2-2.9.source/gcc/crtstuff.c -DCRT_BEGIN \
      -o crtbegin.o
In file included from /usr/include/stdio.h:28,
                 from ../../llvm-gcc-4.2-2.9.source/gcc/tsystem.h:90,
                 from ../../llvm-gcc-4.2-2.9.source/gcc/crtstuff.c:68:
/usr/include/features.h:323:26: error: bits/predefs.h: No such file or directory
/usr/include/features.h:356:25: error: sys/cdefs.h: No such file or directory
/usr/include/features.h:388:23: error: gnu/stubs.h: No such file or directory

我觉得包含路径从我的系统stdio.h返回到llvm-gcc标题然后再次尝试包含系统标题有点奇怪。但也许这很正常?

在该错误之后,数百行带有更多错误的行来自同一个编译单元

可能是我系统的 gcc 4.6.1 或系统的标头与过时的 llvm-gcc 4.2 标头不兼容吗?再说一次,我知道在不同的系统上(运行 2.6 内核)gcc 4.5.2 与 llvm 2.7 的 gcc 4.2 配合得很好。

我在这里不知所措,因为我确实需要最近的 llvm 2.*,而其他两个可接受的 llvm 版本(2.7、2.8)没有显示任何更有帮助的结果。

4

1 回答 1

0

您系统上的 /usr/include 似乎提供了 32 位标头,因此编译失败,因为您没有安装所有 multilib 标头。您可能需要像您的发行版修补 gcc 一样修补 llvm-gcc 才能找到标头位置。

或者,您可以尝试安装 32 位标头并尝试 llvm-gcc 的 multilib 构建。

但最好的方法是切换到 LLVM 3.1 和 clang :)

于 2012-06-17T16:41:02.020 回答