尝试使用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
。