[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:29924] Kernel 2.4.9 でのコンパイル・エラー



 こんにちは。島田です。

 ご存知かもしれませんが、Kernel 2.4.9 で次のようなコンパイル・エラーが
出ます。


 まず、net/drivers/rrunner.c で、次のエラーが出てコンパイルがとまります。


gcc -D__KERNEL__ -I/usr/src/linux-2.4.9/include -Wall
-Wstrict-prototypes -Wno-t
rigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mprefe
rred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux
-2.4.9/include/linux/modversions.h   -c -o rrunner.o rrunner.c
rrunner.c:1241: macro `min' used with only 2 args
rrunner.c:1252: macro `min' used with only 2 args
rrunner.c: In function `rr_dump':
rrunner.c:1241: parse error before `__x'
rrunner.c:1241: `__x' undeclared (first use in this function)
rrunner.c:1241: (Each undeclared identifier is reported only once
rrunner.c:1241: for each function it appears in.)
rrunner.c:1241: `__y' undeclared (first use in this function)
rrunner.c:1252: parse error before `__x'
rrunner.c:1221: warning: `len' might be used uninitialized in this function


 <linux/kernel.h> で min マクロが、

#define min(type,x,y) \
        ({ type __x = (x), __y = (y); __x < __y ? __x: __y; })

と define されているのに、rrunner.c で、

                len = min(0x80, rrpriv->tx_skbuff[cons]->len);

のように利用されているためのようです。

                len = min(int, 0x80, rrpriv->tx_skbuff[cons]->len);

と書き直したらここは無事コンパイルできましたが、今度は fs/ntfs/unistr.c 
で次のエラーが出ます。


gcc -D__KERNEL__ -I/usr/src/linux-2.4.9/include -Wall
-Wstrict-prototypes -Wno-t
rigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mprefe
rred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux
-2.4.9/include/linux/modversions.h -DNTFS_VERSION=\"1.1.16\"   -c -o unistr.o un
istr.c
unistr.c: In function `ntfs_collate_names':
unistr.c:99: warning: implicit declaration of function `min'
unistr.c:99: parse error before `unsigned'
unistr.c:99: parse error before `)'
unistr.c:97: warning: `c1' might be used uninitialized in this function
unistr.c: At top level:
unistr.c:118: parse error before `if'
unistr.c:123: warning: type defaults to `int' in declaration of `c1'
unistr.c:123: `name1' undeclared here (not in a function)
unistr.c:123: warning: data definition has no type or storage class
unistr.c:124: parse error before `if'


たとえば、

        for (cnt = 0; cnt < min(unsigned int, name1_len, name2_len); ++cnt)

の行で、今度は最初の引数の値 unsigned int が解釈できないようです。それに、
implicit declaration だから、ほかにも min マクロか関数が定義されているの
でしょう。

 これ以上は試していませんが、何が悪いのでしょうか。Woody を使っていて、
GCC は 2.95.4 20010902 です。

 よろしくお願いいたします。


----------------------------------------------------------------------
Mail: shimaden@xxxxxxxxx
Home Page: http://www.din.or.jp/~shimaden/
島田博幸
Hiroyuki Shimada
----------------------------------------------------------------------