APIとABIの違い 質問する

APIとABIの違い 質問する

私は Linux システム プログラミングの初心者ですが、 『 Linux システム プログラミング 』を読んでいるときに API と ABI に出会いました。

APIの定義:

API は、ソース レベルで 1 つのソフトウェアが別のソフトウェアと通信するためのインターフェイスを定義します。

ABI の定義:

API はソース インターフェイスを定義しますが、ABI は特定のアーキテクチャ上の 2 つ以上のソフトウェア間の低レベルのバイナリ インターフェイスを定義します。アプリケーションが自分自身と対話する方法、アプリケーションがカーネルと対話する方法、アプリケーションがライブラリと対話する方法を定義します。

プログラムはソース レベルでどのように通信できるのでしょうか? ソース レベルとは何ですか? ソース コードと何らかの関係があるのでしょうか? それとも、ライブラリのソースがメイン プログラムに組み込まれるのでしょうか?

私が知っている唯一の違いは、API は主にプログラマーによって使用され、ABI は主にコンパイラーによって使用されるということです。

ベストアンサー1

API: アプリケーション プログラム インターフェース

これは、アプリケーション/ライブラリから公開するパブリック型/変数/関数のセットです。

C/C++ では、これはアプリケーションに同梱されるヘッダー ファイルで公開されるものです。

ABI: アプリケーションバイナリインターフェース

コンパイラはこのようにしてアプリケーションを構築します。コンパイラ
は次のようなものを定義します (ただし、これに限定されません)。

  • パラメータが関数に渡される方法 (レジスタ/スタック)。
  • スタックからパラメータを消去するのは誰か (呼び出し元/呼び出し先)。
  • return の戻り値が配置される場所。
  • 例外がどのように伝播するか。

おすすめ記事