buildroot编译出错记录
出于对Ubuntu新版本系统的体验,将系统更新到了ubuntu22.04了。然后在编译rv1109 sdk时出现了一些异常的错误。但是已经不回去了,只能硬着头皮一路走下去了。并将错误记录以下,以便下次有类似错误,做个参考。
问题一:c-stack.c的SIGSTKSZ错误
buildroot 报错:c-stack.c:55:26:error:missing binary operator before token “(“55
解决办法
在buildroot目录中找到c-stack.c文件,并更改c-stack.c文件中,SIGSTKSZ的宏定义。
find -name c-stack.c
gedit c-stack.c
将以下内容:
#ifndef SIGSTKSZ
# define SIGSTKSZ 16384
#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
/* libsigsegv 2.6 through 2.8 have a bug where some architectures use
more than the Linux default of an 8k alternate stack when deciding
if a fault was caused by stack overflow. */
# undef SIGSTKSZ
# define SIGSTKSZ 16384
#endif
更改为:
#ifndef SIGSTKSZ
# define SIGSTKSZ 16384
//#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
/* libsigsegv 2.6 through 2.8 have a bug where some architectures use
more than the Linux default of an 8k alternate stack when deciding
if a fault was caused by stack overflow. */
//# undef SIGSTKSZ
//# define SIGSTKSZ 16384
#endif
问题二:libfakeroot.c的_STAT_VER报错
libfakeroot.c:99:40: error: ‘_STAT_VER’ undeclared
解决办法
更改libfakeroot.c文件,添加宏定义
find -name libfakeroot.c
gedit libfakeroot.c
添加内容:
#ifndef _STAT_VER
#if defined (__aarch64__)
#define _STAT_VER 0
#elif defined (__x86_64__)
#define _STAT_VER 1
#else
#define _STAT_VER 3
#endif
#endif
问题三:fwriter_buffer重复定义
read_fs.o:(.bss+0x0): multiple definition of `fwriter_buffer’; mksquashfs.o:(.bss+0x400be8):
解决办法
更改mksquashfs相关文件,去掉bwriter_buffer,与fwriter_buffer的定义,改为‘extern’。
find -name “mksquashfs*”
gedit mksquashfs.h
将:struct cache *bwriter_buffer, *fwriter_buffer;
改为: extern struct cache *bwriter_buffer, *fwriter_buffer;
gedit mksquashfs.c
将: struct cache *bwriter_buffer, *fwriter_buffer;
改为: //struct cache *bwriter_buffer, *fwriter_buffer;
问题四: qfloat16.h报错
qfloat16.h: numeric_limits’ is not a class template
解决办法
修改 Src/qtbase/src/corelib/global/qglobal.h
将:
#ifdef __cplusplus
# include <type_traits>
# include <cstddef>
# include <utility>
#endif
#ifndef __ASSEMBLER__
# include <assert.h>
# include <stddef.h>
#endif
改为:
#ifdef __cplusplus
# include <type_traits>
# include <cstddef>
# include <utility>
# include <limits>
#endif
#ifndef __ASSEMBLER__
# include <assert.h>
# include <stddef.h>
#endif
问题五: makedevs无法创建设备节点
makedevs: line 27: can’t create node /dev/console: Operation not permitted
解决办法
经查找错误信息,是fakeroot执行fakeroot.fs时报的错。因为是升级了ubuntu系统,可能存在fakeroot版本过低导致。于是将fakeroot版本从1.20.2更新到了1.32.1.操作如下:文章来源:https://www.toymoban.com/news/detail-670849.html
- 在git.buildroot.org中下载了最新的buildroot文件,在里面找到fakeroot目录下:fakeroot.hash与fakeroot.mk文件。
- 备份buildroot/package/fakeroot目录下原有文件。
- 将新的fakeroot.hash与fakeroot.mk文件拷贝到buildroot/package/fakeroot目录下。
- 重新编译,问题解决。
注意事项
在编译recovery时,也需要注意以上更新,否则也会报错。文章来源地址https://www.toymoban.com/news/detail-670849.html
到了这里,关于ubuntu22.04下rv1109 rootfs编译问题处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!