初步分析make的一個問題:Argument list too long

來源:互聯網
上載者:User

一個同事在編譯loadmodule時遇到了一個問題

gmake: execvp: /bin/sh: Argument list too longgmake: *** [     .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傳遞參數等等

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.