原文位址:http://www.linuxdiyf.com/linux/24289.html
0、開發環境
Ubuntu18.04.1(64bit)
linux-2.6.39.4
1、錯誤描述
使用ubuntu14.04(64bit)編譯linux2.6.39.4并沒有出現什麼錯誤,但是使用ubuntu18.04.1(64bit)編譯linux-2.6.39.4時,卻提示Can't use 'defined(@array)' (Maybe you should just omit the defined()?)錯誤。
2、解決方法
參考:編譯kernel perl版本bug
最近更新了一下ubuntu系統,突然發現mini2440的Linux kernel無法編譯通過了,報了如下錯誤:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
其實,提示的錯誤資訊已經明确告訴你了,你應該省略defined().
這裡,我們打開 kernel/timeconst.pl
@val = @{$canned_values{$hz}};
if (defined(@val)) {
@val = compute_values($hz);
}
output($hz, @val);
将if (defined(@val)) 改為if (@val),再次編譯就可以通過了。
查了一下更新,發現其中有一項是perl版本更新到了 v5.22.1,然後查了perl官方文檔,發現官網因為一個bug,該版本将defined(@array)去掉了。可以直接使用數組判斷非空。