我正在 x86_64 linux 主机上构建 32 位 (i386) linux 内核。主机和目标版本都是 2.6.9。我正在从 linux 源代码树中执行以下操作:
make ARCH=i386 CFLAGS='-m32 -Iinclude/asm/mach-default' AFLAGS='--32' menuconfig
make ARCH=i386 CFLAGS='-m32 -Iinclude/asm/mach-default' AFLAGS='-m32 -Iinclude/asm/mach-default'
我会从第二个 make 中遇到以下错误:
AS arch/i386/kernel/entry.o
In file included from include/linux/bitops.h:4,
from include/asm/cpufeature.h:10,
from include/asm/processor.h:16,
from include/asm/thread_info.h:16,
from arch/i386/kernel/entry.S:45:
include/asm/bitops.h:42: detected recursion whilst expanding macro "inline"
bitops.h 中的第 42 行如下所示:
static inline void set_bit(int nr, volatile unsigned long * addr)
由于 gcc 支持内联函数,我不明白为什么这个“内联”被视为宏,怎么会有递归扩展“内联”?
我的 gcc 版本是:
gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-11)
任何见解都值得赞赏。