4

コンパイルとABIはどのように関連していますか?

OSや他のアプリケーションへのアプリケーションバイナリインターフェイス(ABI)を構築するのは、コンパイラの唯一の仕事ですか?

ウィキペディアから引用されたABIについて:

ABIは、データタイプ、サイズ、配置などの詳細をカバーします。関数の引数の受け渡し方法と取得される戻り値を制御する呼び出し規約。システムコール番号と、アプリケーションがオペレーティングシステムに対してシステムコールを行う方法。完全なオペレーティングシステムABIの場合、オブジェクトファイル、プログラムライブラリなどのバイナリ形式。

ありがとう、よろしく!

4

3 に答える 3

5

ABIは、基盤となるOSの機能を記述し、プログラムのコンパイル方法に関するいくつかのルールを含みます。ABIを「構築」するのではなく、実行可能コードを作成するときにABIに準拠するのがコンパイラの仕事です。

于 2011-03-27T19:20:14.340 に答える
2

まあ、コンパイラはABIに完全には従わないかもしれません。有効なマシンコードを発行する必要がありましたが、たとえば、内部関数呼び出しの呼び出し規約に従わない場合があります。しかしもちろん、コンパイルされたコードとOSの境界では、コンパイラはABIに従う必要があります。

于 2011-03-27T19:25:59.343 に答える
0

コンパイラは、ソースからオブジェクトファイルを出力する必要があります。これは、アドレッシングモードの可用性、使用可能なレジスタなど、ABI内で明確にされるアーキテクチャに依存します。また、OSはパフォーマンス上の理由からアーキテクチャと緊密に結合されているため、ファームウェアを作成している場合を除き、システムコールに関するOSの呼び出し規約およびそのような関連する詳細はABIパーセルの一部です。

コンパイラは、高レベルのソーステキストをマシンレベルのオペコードとデータに置き換えます。ツールチェーンに応じて、出力は準拠する必要があります。たとえば、Windowsをターゲットとするリンカーは、WindowsライブラリをサポートするためのPE形式のオブジェクトファイルと、ツールチェーンのコンパイラがELFなどの他の形式のいずれかに出力する場合は追加の形式を必要とします。

于 2013-04-10T06:04:52.957 に答える