0

インクリメンタル ビルドを実行しようとすると、make で次のエラーが発生します。

make[2]: execvp: C:/path/to/compiler.exe: メッセージが長すぎます

ここでの問題は、execvp の引数の長さにあると思います。その限界は何か分かりますか?それを変えるにはどうすればよいでしょうか?

興味深い追加情報: 以前の make 依存関係が短い名前のフォルダーにある場合、同じコマンドが成功します。execvp に依存するメモリの量は、以前のコマンドの影響を受けていますか?

たとえば、インクリメンタル ビルド ファイル (数百ある) へのパスから 17 文字を切り捨てると、約 12k 文字が節約され、コンパイラへの 6k 文字のコマンド ラインは成功します。そのパスを削減しないと、同じコマンド ラインが失敗します。

4

2 に答える 2

1

%PATH% ($PATH から取得) が長すぎるため、このエラーが発生します。

于 2009-11-12T11:19:22.460 に答える
1

Windows の CreateProcess() には次の制限があります。

1) pCommandLine [イン、アウト、オプション]

The command line to be executed. The maximum length of this string is 32,768 characters, including the Unicode terminating null character.

2) この関数の ANSI バージョンである CreateProcessA は、プロセスの環境ブロックの合計サイズが 32,767 文字を超えると失敗します。

制限 2) によって同様の問題が発生しましたが、適切な解決策が見つかりませんでした。おそらく、CreateProcess() への Unicode 呼び出しを使用して cygwin を再コンパイルすると役立つでしょう。私にとっては、環境から何かを取り除くだけで十分でした。

クシシュトフ・ノワク

于 2009-05-13T10:52:30.423 に答える