初步分析make的一個問題:Argument list too long
阿新 • • 發佈:2019-02-19
一個同事在編譯loadmodule時遇到了一個問題
gmake: execvp: /bin/sh: Argument list too long gmake: *** [ .o] Error 127這種情況以前並沒有遇到,一番google之後才知道這個是OS kernal的限制
在某些OS中,定義為ARG_MAX或者NCARGS,用來定義OS中引數的最大長度。
當出現這種問題時,我們應該關注argv[]和envp[],即引數本身和環境變數。對於環境變數,可以通過 env 檢視。若env長度過長,則可以考慮刪除不必要的環境變數。事實上,可以通過如下命令估計process可用於argrment的長度:
expr `getconf ARG_MAX` - `env|wc -c` - `env|wc -l` \* 4 - 2048其中2048為POSIX所建議用於保證process可以安全修改環境變數所需要的buffer.
由於ARG_MAX/NCARGS 作為核心引數,修改起來並非易事,至少你需要root許可權。。。
比如在AIX中,可以執行 chdev -l sys0 -a ncargs=NewValue ,指定新的長度
由於這個是在IDE中編譯出現的問題,其實分析起來會很頭疼,不透明啊。後來,我換了命令列編譯,OK了(神奇,無語ing)
至於修改核心引數並沒有試過,有時間還是得試試^_^
PS:
如果只是在shell或者我們自己的程式中出現問題,可以考慮分割引數,或者使用xargs傳遞引數等等