質問: 64 -dhave_config_h -g -o2 -c /home/cleong/qb/qb_interpreter_gcc.c -fpic -dpic -o .libs/qb_interpreter_gcc.o cc1:合計924852224バイトの後に408バイトを割り当てるメモリ不足 make:*** [qb_interpreter_gcc.lo]エラー1 / bin/time -vからの出力:command exited with non-zero status 2 command being timed: "make" user time (seconds): 62.09 system time (seconds): 11.28 percent of cpu this job got: 64% elapsed (wall clock) time (h:mm:ss or m:ss): 1:53.02 average shared text size (kbytes): 0 average unshared data size (kbytes): 0 average stack size (kbytes): 0 average total size (kbytes): 0 maximum resident set size (kbytes): 1848592 average resident set size (kbytes): 0 major (requiring i/o) page faults: 9433 minor (reclaiming a frame) page faults: 1391779 voluntary context switches: 5642 involuntary context switches: 6069 swaps: 0 file system inputs: 630360 file system outputs: 1376 socket messages sent: 0 socket messages received: 0 signals delivered: 0 page size (bytes): 4096 exit status: 2 gccのバージョンは4.7.2です。ソースコードはここにあります: https://github.com/chung-leong/qb これはphp拡張機能です。ビルドプロセスはphpizeを使用します。更新-32ビットのmageia3でも同じ問題が発生しています。これにはgcc4.7.2も含まれています。代わりに、約2.7ギガで障害が発生します。 64ビット環境では、それは起こりません。gcc 4.6.3をインストールし、それを使用してビルドすると、機能します。
回答: -o1以下の最適化レベルで、64ビットubuntuがプロジェクトをコンパイルできるという事実は、問題がgccの最適化フェーズにあることを意味します。プロジェクト内の一部のソースファイルは、バージョン4.7.2で導入されたgccオプティマイザーのバグまたは非効率性によって発生すると思います。これにより、不当な量のメモリが使用されます。だから私が提案するのは: 32ビットバージョンのgccは、2〜3 gbのメモリにしかアクセスできません(スワップのサイズに関係なく)。 スワップスペースを拡大しますが、それでも問題が解決しない場合は読み続けてください。いずれにせよ、32ビットgccの場合、使用できるメモリの量には制限があります。 ソースファイルを1つずつコンパイルして、問題の原因となっているファイルを見つけます。これがすべてである場合、問題はいくつかのインクルードファイルにあります。 インクルードファイルに問題がない場合は、エラーの発生を停止するか、エラーの原因となっている関数を見つけるまで、問題のあるソースファイルをさらにいくつかの部分に分割します。 一時的な回避策として、その関数を-o1でコンパイルするようにmakeファイルを変更します。この場合、問題はgcc自体にあり、その関数をバグレポートで送信できます(allインクルードファイルと一緒に)。 もちろん、プロジェクト全体を-o1でコンパイルすることもできます。これは、php拡張子で十分なはずです。または、今のところgcc4.6.3のままにすることもできます。 バグレポートとは無関係にバグが修正(または非効率性が削除)される可能性があるため、gccの新しい更新を試し続けてください。