GCCで完全に最適化された「リリースモード」でビルドする必要がある具体的なオプションは何ですか?複数のオプションがある場合は、それらをすべてリストしてください。ありがとう。GCCで最適化されたリリースモードでのビルド方法は?
答えて
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
には「1つのフリーサイズません」があります - あなたは、バイナリの正しいサブセットを決定するために、あなたの要件および最適化フラグを、あなたのアプリケーションを理解する必要があります。
それともあなたが望む答え: -03
-O2はスペース\速度のトレードオフを必要とし、最も頻繁に使用され、私が見る1になる傾向はありませんすべての最適化をオンにします。 -O3は、(インライン関数のような)高速トレードオフのためのスペースを提供します。-O2は、コードサイズを減らすためにO2 plusに他のことを行います。これは、キャッシュの使用を改善することによって、O3よりも高速にすることができます。 (あなたのために働くかどうかを調べるためのテスト)Oスイッチのどれも触れることのない多数のオプションがあることに注意してください。それらが除外される理由は、あなたが書いているコードの種類やアーキテクチャに非常に依存していることが多いからです。
gccには、MSVCのように「リリースモード」と「デバッグモード」はありません。すべてのコードは単なるコードです。さまざまな最適化オプション(-O2と-Oは非常に細かいチューニングをしない限り、一般に気にする必要がある唯一のものです)は、生成されたコードを変更しますが、他のABI準拠の相互運用性を妨げる方法ではありませんコード。一般に、リリースしたいものの最適化が必要です。
"-g"オプションがあると、拡張シンボルとソースコードの情報が生成されたファイルに配置されます。この情報はデバッグには役立ちますが、ファイルのサイズが大きくなり、ソースコードが表示されます。あなたはしばしば "リリースされた"バイナリでは望ましくないものです。
しかし、排他的ではありません。最適化とデバッグ情報でコンパイルされたバイナリを持つことができます。
生成されたコードをデバッグする場合は、通常は最適化を無効にする必要があります。そうしないと、デバッグがDavid Lynchのフィルムに似たエクスペリエンスになります。 – caf
それは悪くありません、私はスタック・ダンプとvalgrind出力を常に "リリース"・バイナリから見ます。 -fomit-stack-pointerを使用せず、静的なものがインラインで表示されている可能性があることを理解している限り、非常に最適化されたバイナリであっても非常に多くのコンテキストを読むことができます。あなたの関数が短い場合は、通常、推測または2つでクラッシュした式を把握することができます。 –
しかし、David Lynchの映画とは違って、デバッガを使用すると、さまざまなレベルの現実の間で自由にトグルできるようになります。逆アセンブリを理解していれば、ソースラインが散在した状態でのシングルステッピングは、通常、最適化を行ってもある程度の意味を持ちます。あなたが分解を理解していなければ、あなたは学びます。 –
私が定期的に使用するMakefileの一部です(この例では、fooという名前のプログラムをビルドしようとしています)。
あなたが$ make BUILD=debug
または$ make debug
のようにそれを実行した場合、デバッグ CFLAGSが使用されます。これらは最適化(-O0
)をオフにし、デバッグシンボル(-g
)を含みます。
あなたは(追加パラメータなし$ make
を実行することによって)これらのフラグを省略した場合、あなたが最適化(-O2
)、デバッグシンボルが(-s
)を剥がし、アサーションが無効になっているリリース CFLAGSのバージョンを構築します(-DNDEBUG
) 。
他の人も示唆しているように、具体的なニーズに応じて異なる-O*
の設定を試すことができます。
ifeq ($(BUILD),debug)
# "Debug" build - no optimization, and debugging symbols
CFLAGS += -O0 -g
else
# "Release" build - optimization, and no debug symbols
CFLAGS += -O2 -s -DNDEBUG
endif
all: foo
debug:
make "BUILD=debug"
foo: foo.o
# The rest of the makefile comes here...
- 1. GCC /ビルド時間の最適化
- 2. OpenCVは最適化されたデバッグモードでビルドされますか?
- 3. GCC handpicking最適化
- 4. 最適化された方法
- 5. gccで特定の最適化フラグをオフにする方法
- 6. rdtscでのgcc最適化の問題
- 7. 異なる最適化されたオブジェクトファイルでGCC LTOを使用するには?
- 8. GCCから最適化されたソースコードを取得
- 9. 最適化で最適化されたプロファイリング関数
- 10. GCCのすべての最適化をオフにする方法
- 11. ndk-buildのgcc最適化レベルを知る方法
- 12. GCCコンパイラ最適化機能インライン化
- 13. 最適化された方法でサブクエリでCOUNTを選択する方法
- 14. ビジュアルスタジオ2008ビルドの最適化
- 15. Microsoft Visual Studio:デバッグDLLは、リリースモードでビルドされたバイナリで使用されます
- 16. オフセットで最適化されたコピー/ペーストコード?
- 17. QPixmapで最適化された図面
- 18. GCCリンカに与えられた最適化フラグの効果
- 19. ARM gccのインラインアセンブラの最適化問題
- 20. C++プロファイリング/最適化:最適化された関数で精度の高いプロファイリング精度を得る方法
- 21. 最適化されたページングソリューション
- 22. 最適化されたjQuery
- 23. OpenSSLをシンボル付きでリリースモードでビルドする方法は?
- 24. "tree - ***"ファミリーのGCC最適化オプションの目的は何ですか?
- 25. mallocとgccの最適化2
- 26. GNU GCCコンパイラの最適化とデバッグ
- 27. 署名済み:gccの最適化 "バグ"
- 28. gcc:なぜリテラルのキャストが最適化されていないのですか?
- 29. GCCの高価な最適化とは何ですか?
- 30. ビルド後のアクションを自動化する最適な方法は何ですか?
私はしたが、まっすぐな説明を見つけることができませんでした。私はちょうど検索で吸うことができます。 – Polaris878
さらに、SOの要点は、Googleのような検索エンジンに表示されることです。 – Polaris878
フェアコール。 これはあなたの後のことですか?または、もう少しコンテキスト/情報が必要ですか? – Josh