私はMac OS X 10.6でGCC 4.6.2を使用しています。私はコンパイル時に-static-libgccオプションを使用します。そうしないとバイナリがシステム上のlibgccを探しますが、GCC 4.2以上はOS Xでサポートされているとは思えません。これはうまく動作しますが、なぜlibgccが必要なのでしょうか?私はそれを読んで、GNUのドキュメントには「ターゲットプロセッサが直接実行できない算術演算」が含まれていると言われています。これらの操作が何であるかをどのように知っていますか?なぜ私はこのライブラリを組み込む必要があるのですか? GCCはなぜこれらのライブラリ関数に頼る代わりにコードを直接最適化することはできませんか?私は少し混乱しています。これについての洞察は高く評価されます!本当にlibgccが必要ですか?
答えて
はい、おそらくそれは....必要があります。あなたがそれを必要としないなら、それを静的にリンクすることは無害です。 -t
リンクトレースオプションを使用して、必要があるかどうかを判断できます(私はそうだと思います)。
1つの命令では実行できないさまざまなことがあります(通常、32ビットアーキテクチャの64ビット演算など)。これらのことを行うことはできますが、それほど意外な数の命令を使用しない場合は、それらをすべて1か所に配置するのにスペース効率が高くなります。
-O0
を使用して最適化を無効にすると(これは実際にはデフォルトですが)、GCCは常にlibgccルーチンを使用します。
あなたはスピード最適化を有効にすると(それがどのように知っている場合)、その後、GCCは直接コードに命令シーケンスを挿入することもできます。 libgccのバージョンを一切使用しないことに気付くかもしれません。libgccの呼び出し回数は少なくなります。
サイズの最適化を有効にすると、GCCが関数呼び出しを優先するか、GCC開発者がそれぞれの場合に最適な速度/サイズのトレードオフと思われるかによって異なります。速度を最適化するように指示しても、コンパイラはの一部の関数が使用される可能性は低いと判断し、それらのサイズを最適化することができます。
基本的には、memcpy
や数学ライブラリ関数と同じように考えることができます。コンパイラは、それが有益であると判断したインライン関数を呼び出し、それ以外の場合はライブラリ関数を呼び出します。コンパイラは、ライブラリ定義を見ることなく、標準関数とlibgcc関数を "インライン化"することができます。
静的または動的libgccのどちらを使用するかは、面白いトレードオフです。一方では、動的(共有)ライブラリはシステム全体のメモリ使用量が少なくなり、キャッシュされる可能性が高くなります。一方、静的libgccの呼び出しオーバーヘッドは低くなります。
最も重要なのは互換性ですが。明らかにlibgccライブラリはあなたのプログラムを実行するために存在しなければならないが、互換性のあるバージョンでなければならない。 LinuxディストリビューションではGCC版が安定していて大丈夫ですが、静的リンクは安全です。
ご質問にお答えいただければ幸いです。
はい!スーパーヘルプ。ありがとう! – Synthetix
- 1. CDATAは本当に必要ですか?
- 2. KillTimerは本当に必要ですか?
- 3. local_variables_initializerは本当に必要ですか?
- 4. 本当に必要ですか?
- 5. 私は本当にJavaDocタグ@fileか@sinceが必要ですか?
- 6. C++でmain()が本当に必要ですか?
- 7. C#でVOLATILEキーワードが本当に必要ですか?
- 8. スピンロックには本当にDMBが必要ですか?
- 9. OpenSSLには本当にopenssl.confへのパスが必要ですか?
- 10. 本当にASP.NETラベルにText属性が必要ですか?
- 11. iOSアプリケーションにMainWindow.xibが本当に必要ですか?
- 12. node.jsの処理にはプロキシが本当に必要ですか?
- 13. 経路指定に./が本当に必要ですか?
- 14. 認証サービスにはandroid:exported = "true"が本当に必要ですか?
- 15. ドッカー画像にセキュリティアップデートが本当に必要ですか
- 16. 本当に検証する公証人が必要ですか?
- 17. 本当にユニコーンレール用のDB接続プールが必要ですか?
- 18. 本当にドッカー集団が必要ですか?
- 19. ポータル:本当にポータルが必要ですか
- 20. ios5 facebook app - 本当にgit hubが必要ですか?
- 21. 本当に安全なリリースマクロが必要ですか?
- 22. css BEM - 本当にEが必要ですか?
- 23. Rhino Mocks - 本当にスタブが必要ですか?
- 24. 本当にstd :: error_categoryとstd :: error_conditionが必要ですか?
- 25. 本当にこのストアドプロシージャのパラメータが必要ですか?
- 26. ここに本当に必要なバンパターンがありますか?
- 27. は:cusorに本当に必要なホバー?
- 28. Facebook API - 本当に基本的なevents.get()リクエスト、助けが必要
- 29. A2lix翻訳フォームで本当に必要ですか?
- 30. イベントのバリデーション - Jsヘビーアプリケーションには本当に必要ですか
Unix上で使用可能な同じ:http://unix.stackexchange.com/questions/1812/what-does-libgcc-s-so-contain –