web-dev-qa-db-ja.com

g ++コンパイルオプション-gデバッグおよび-O最適化

私はg ++コンパイラ、特にオプション(-s、-g、-Oなど)に精通していません。

まず、これらのオプションはいつ有効になりますか?コンパイルまたはリンクフェーズ中?私は通常、必要なすべてのオプションを両方のフェーズに配置します。

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

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

12
jason.Z

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

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

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

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

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

13
vladmihaisima