16

私は g++ コンパイラ、特に -s、-g、-O などのオプションにあまり詳しくありません。

まず、これらのオプションが有効になるのはいつですか? コンパイルまたはリンク段階ですか? 通常、必要なすべてのオプションを両方のフェーズに入れます。

次に、-g1、-g2、-g3 オプションはありますか? -g は、実行可能ファイルにデバッグ情報を追加することを知っています。他の人はどのように違いますか?

第三に、-s は何をしますか? -s、-g、および -O3 は一緒に機能しますか? 私の目標は、実行可能ファイルを 1) すばやく実行し、2) 可能であればサイズを小さくすることです。何を指示してるんですか?

4

1 に答える 1

20

オプションに焦点を合わせるのではなく、達成したいことに焦点を当てる必要があります。あなたが達成したいことに関する私の一般的なコメント:

  • 通常、高速と小型の間にはトレードオフがあります。-O3は速いことを意味します。Osは、サイズを大きくすることなく、可能な限り高速であることを意味します。
  • デバッグ情報(-g)と最適化(-O3)を使用できますが、ソースと結果のコードが直接接続されていないため、情報が不十分な場合があります。
  • 実行可能ファイルからデバッグ情報(-s)を削除すると、その実行可能ファイルを簡単にデバッグできなくなります(デバッグ情報を個別に保存することもできますが、これは別の話です)

常にマニュアルを使用し(シェル「mang ++」と入力するか、インターネットで「man g ++」を検索してアクセスします)、その機能に興味がある場合はオプションを検索してください。より高いレベルの質問がある場合は、質問することができます(たとえば、-g1と-g3の違いはマニュアルで説明されています)

提案として:-O3を使用してください。プログラムを絶えず開発し、デバッガーとしてGDBを使用する場合は、-ggdb-g3を使用します。

編集:それらをいつ適用するかについて:通常、フェーズについて心配する必要はありません。オプションを送信するだけで、g++がそれらを処理します。より具体的なものが必要な場合は、さらに確認できます。

于 2012-09-12T11:01:56.843 に答える