tur*_*rbo 7 linux-kernel buildroot busybox riscv
我正在尝试使用 buildroot(busybox) 为 RISCV Arch 编译 linux。我之前使用的是 18.04 和 20.04,编译没有任何问题。现在,我已将其升级到 21.10 以构建其他一些东西。我已经移动了我的工具链,我可以使用which命令找到它。当我尝试编译 Linux 时,出现了一些在早期版本中没有遇到过的错误。
>>> host-m4 1.4.18 Building
In file included from /usr/include/signal.h:328,
from ./signal.h:52,
from c-stack.c:49:
c-stack.c:55:26: error: missing binary operator before token "("
55 | #elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
| ^~~~~~~~
CC closein.o
c-stack.c:134:8: error: variably modified 'buffer' at file scope
134 | char buffer[SIGSTKSZ];
| ^~~~~~
CC closeout.o
Run Code Online (Sandbox Code Playgroud)
我对不同版本如何导致此错误感到困惑。
提前致谢。
看来您在 GNU C 库版本 2.34 中进行了更改,可以使SIGSTKSZ非恒定。
- 添加
_SC_MINSIGSTKSZ和_SC_SIGSTKSZ。当_DYNAMIC_STACK_SIZE_SOURCE或_GNU_SOURCE被定义时,MINSIGSTKSZ并且SIGSTKSZ在 Linux 上不再是常量。MINSIGSTKSZ被重新定义为sysconf(_SC_MINSIGSTKSZ)并被SIGSTKSZ重新定义为sysconf (_SC_SIGSTKSZ). 这支持动态大小的寄存器集,以实现 Arm SVE 等现代架构功能。
可能的解决方法是将 buildroot 配置为构建 host-m4 版本 1.4.19 而不是 1.4.18,因为它不再使用SIGSTKSZ.