新版的gcc不允許多行的組合語言語法
但是舊版的支援
所以當出現這樣的問題時
必須要手動更改
將多行的敘述改為單行的敘述
In file included from ksyms.c:50:
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:72:30: missing
terminating \" character
In file included from ksyms.c:50:
/usr/src/kernel-source-2.4.18/include/asm/checksum.h: In function
`ip_fast_csum\':
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:73: error: parse error
before \"movl\"
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:75:17: invalid suffix \"f\"
on integer constant
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:82:17: invalid suffix \"b\"
on integer constant
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:90:13: missing
terminating \" character
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:105:17: missing
terminating \" character
/usr/src/kernel-source-2.4.18/include/asm/checksum.h: In function `csum_fold\':
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:106: error: parse error
before \"addl\"
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:108:17: missing
terminating \" character
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:121:13: missing
terminating \" character
/usr/src/kernel-source-2.4.18/include/asm/checksum.h: In function
`csum_tcpudp_nofold\':
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:122: error: parse error
before \"addl\"
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:126:9: missing
terminating \" character
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:128: error: `__x\'
undeclared (first use in this function)
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:128: error: (Each
undeclared identifier is reported only once
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:128: error: for each
function it appears in.)
/usr/src/kernel-source-2.4.18/include/asm/checksum.h: At top level:
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:128: error: parse error
before \')\' token
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:161:17: missing
terminating \" character
/usr/src/kernel-source-2.4.18/include/asm/checksum.h: In function
`csum_ipv6_magic\':
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:162: error: parse error
before \"addl\"
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:173:17: missing
terminating \" character
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:176: error: `__x\'
undeclared (first use in this function)
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:176: warning: no return
statement in function returning non-void
/usr/src/kernel-source-2.4.18/include/asm/checksum.h: At top level:
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:176: error: parse error
before \')\' token
/usr/src/kernel-source-2.4.18/include/asm/checksum.h:176: error: parse error
before \"__u32\"
make[3]: *** [ksyms.o] Error 1
make[3]: Leaving directory `/usr/src/kernel-source-2.4.18/kernel\'
make[2]: *** [first_rule] Error 2
make[2]: Leaving directory `/usr/src/kernel-source-2.4.18/kernel\'
make[1]: *** [_dir_kernel] Error 2
make[1]: Leaving directory `/usr/src/kernel-source-2.4.18\'
make: *** [stamp-build] Error 2
通常會出現在用新的gcc去編譯比較舊(2.4.18算是比較舊XD)的核心
新版的gcc不允許多行的組合語言語法
但是舊版的支援
所以當出現這樣的問題時
必須要手動更改
將多行的敘述改為單行的敘述
將以下的原本程式碼
__asm__ __volatile__(\"
movl (%1), %0
subl $4, %2
jbe 2f
addl 4(%1), %0
adcl 8(%1), %0
adcl 12(%1), %0
1: adcl 16(%1), %0
lea 4(%1), %1
decl %2
jne 1b
adcl $0, %0
movl %0, %2
shrl $16, %0
addw %w2, %w0
adcl $0, %0
notl %0
2:
\"
改成
__asm__ __volatile__(\" movl (%1), %0 subl $4, %2 jbe 2f addl 4(%1), %0 adcl 8(%1), %0 adcl 12(%1), %01: adcl 16(%1), %0 lea 4(%1), %1 decl %2 jne 1b adcl $0, %0 movl %0, %2 shrl $16, %0 addw %w2, %w0 adcl $0, %0 notl %02: \"
並且注意是由前一行的尾端按delete來讓下一行變成同一行
直到所有\"\"內的敘述變成同一行
如上所示
這麼一來就可以順利編譯嚕
試過其他看到的方法
如每行後面加上\\n
或是使用版本為2.95的gcc編譯
但是都沒有用
沒有留言:
張貼留言