2.6.18-git15 から 2.6.18-git16 へにかけての, [PATCH] Generic boolean という patch のために,vmmon.o の compile でこける.
gcc -m32 -Wp,-MD,/tmp/vmware-config0/vmmon-only/common/.task.o.d -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/4.1.2/include -D__KERNEL__ -Iinclude -include include/linux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Os -pipe -msoft-float -mpreferred-stack-boundary=2 -march=i686 -ffreestanding -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI=1 -Iinclude/asm-i386/mach-default -fomit-frame-pointer -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wstrict-prototypes -DVME_DEFAULT=VME_V452 -DVMW_USING_KBUILD -DVMMON -DVMCORE -I/tmp/vmware-config0/vmmon-only/./include -I/tmp/vmware-config0/vmmon-only/./common -I/tmp/vmware-config0/vmmon-only/./linux -I/tmp/vmware-config0/vmmon-only/./vmcore -DVMW_NOPAGE_261 -DVMWARE__FIX_IO_APIC_BASE=FIX_IO_APIC_BASE_0 -DVMW_HAVE_EPOLL -DVMW_HAVE_COMPILE_H -DVMW_HAVE_SET_USER_NICE -x c++ -fno-exceptions -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(task)" -D"KBUILD_MODNAME=KBUILD_STR(vmmon)" -c -o /tmp/vmware-config0/vmmon-only/common/.tmp_task.o /tmp/vmware-config0/vmmon-only/common/task.c include/linux/stddef.h:16: error: expected identifier before 'false' include/linux/stddef.h:16: error: expected `}' before 'false' include/linux/stddef.h:16: error: expected unqualified-id before 'false' include/linux/types.h:36: error: expected initializer before 'bool' /tmp/vmware-config0/vmmon-only/common/task.c:43: error: expected declaration before '}' token make[2]: *** [/tmp/vmware-config0/vmmon-only/common/task.o] エラー 1
といった感じで.以下の箇所が問題らしい.
[include/linux/stddef.h]
enum {
false = 0,
true = 1
};
[include/linux/types.h]
typedef _Bool bool;
これ以上は追えず.
ちなみにこの patch は 2.6.19-rc1 にも含まれているので,同様.
悩んでみたが,どう対処したらいいのか良く判らなかった... あんまり宜しくない対応だが,上記 kernel header の箇所を comment out す ると vmmon.o (の task.c) の compile がとおるようになる模様.
上記 gcc の option は -x c++ になっていて, つまり c++ で compile しているわけであるが, false やら true やら bool があらかじめ c++ に用意されているためにこけているらしい.
とはいえどう対処したものか...といった感じではあるが, とりあえず上述の問題の kernel header の部分を
#ifndef __cplusplus typedef _Bool bool; #endif
とかするのが吉っぽい.
Last-modified: Sun Apr 20 23:11:41 +0900 2008