用Buildroot编译alsa-lib:C预处理程序无法进行完整性检查

尝试使用Buildroot为LPC3250 ARM编译Linux映像。 股票设置,它编译好。 当我尝试添加alsa-lib和alsa-utils时,出现此错误:

configure: error: in `/home/user/projects/buildroot/output/build/alsa-lib-1.0.26 ': configure: error: C preprocessor "/home/user/projects/buildroot/output/host/usr/ bin/arm-buildroot-linux-uclibcgnueabi-cpp" fails sanity check See `config.log' for more details 

alsa-lib的config.log摘录。 它有点糟糕,因为有一半的错误信息已被切断,出于某种原因:

  /home/user/projects/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/features.h:219:5: error: #error It appears you have defined _FILE_OF$ In file included from /home/user/projects/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/stdio.h:72, from conftest.c:12: /home/user/projects/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/bits/uClibc_stdio.h:61:2: error: #error Sorry... uClibc was built wi$ In file included from conftest.c:12: /home/user/projects/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/stdio.h:83: error: expected '=', ',', ';', 'asm' or '__attribute__' $ In file included from conftest.c:12: /home/user/projects/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/stdio.h:721: error: expected declaration specifiers or '...' before $ /home/user/projects/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/stdio.h:723: error: expected ';', ',' or ')' before '*' token 

类似的问题在这里说了一些关于“unsetting”CPP和CPPFlags。 不知道我会在这里做什么或在Buildroot环境中检查它。 我不确定这是否是同样的问题。 我猜这是不相关的,因为在另外一个问题,它是在谈论编译GCC,我不这样做。

我现在的#1预感是我必须编辑lib-alsa的configuration文件。 我只是不确定做什么编辑。

编辑:有一些积极的谷歌search,想出了我认为是我的错误之一的完整版本: ...features.h:329:2: #error It appears you have defined _FILE_OFFSET_BITS=64. Unfortunately, uClibc was built without large file support enabled. ...features.h:329:2: #error It appears you have defined _FILE_OFFSET_BITS=64. Unfortunately, uClibc was built without large file support enabled. 检查我的uClibcconfiguration文件和UCLIBC_HAS_LFS=y是存在的。 ???

这里的问题的根源是Buildroot使用位于: output/toolchain/uClibc-0.9.33.2/.config的uClibc配置文件

而不是toolchain/uClibc/uClibc-0.9.33.config配置菜单中指定的toolchain/uClibc/uClibc-0.9.33.config

我运行了make uclibc-menuconfig (默认将配置保存在.config中),并选择了General Library Settings->Large File Support和一切正常的编译。

那么,当toolchain/uClibc/uClibc-0.9.33.config配置和构建uClibc时, output/toolchain/uClibc-0.9.33.2/.config是从toolchain/uClibc/uClibc-0.9.33.config生成的。 所以使用output/toolchain/uClibc-0.9.33.2/.config作为uClibc配置没有任何意义。 您应该保留toolchain/uClibc/uClibc-0.9.33.config的默认值。

关于大文件支持,通常所有的软件包都有适当的依赖关系。 因此,如果软件包需要大文件支持,则只有在Buildroot中启用大文件支持后才能选择软件包。 如果不是这样的话,那么这是一个bug,而且Buildroot社区会有兴趣提供一个关于这个bug的bug报告(详细描述了Buildroot版本,使用的Buildroot配置文件以及你得到的构建错误) 。

现在,如果确实需要大文件支持,则应该在Buildroot级别而不是在uClibc级别启用它。 如果只在uClibc级别启用它,那么Buildroot现在不会介绍这个,并且不会显示所有依赖于大文件支持的包。

所以,你应该做的是在BR2_TOOLCHAIN_BUILDROOT_LARGEFILE启用BR2_TOOLCHAIN_BUILDROOT_LARGEFILE配置选项,然后做一个完整的重建: make clean all