私は Linux システム プログラミングの初心者ですが、 『 Linux システム プログラミング 』を読んでいるときに API と ABI に出会いました。
APIの定義:
API は、ソース レベルで 1 つのソフトウェアが別のソフトウェアと通信するためのインターフェイスを定義します。
ABI の定義:
API はソース インターフェイスを定義しますが、ABI は特定のアーキテクチャ上の 2 つ以上のソフトウェア間の低レベルのバイナリ インターフェイスを定義します。アプリケーションが自分自身と対話する方法、アプリケーションがカーネルと対話する方法、アプリケーションがライブラリと対話する方法を定義します。
プログラムはソース レベルでどのように通信できるのでしょうか? ソース レベルとは何ですか? ソース コードと何らかの関係があるのでしょうか? それとも、ライブラリのソースがメイン プログラムに組み込まれるのでしょうか?
私が知っている唯一の違いは、API は主にプログラマーによって使用され、ABI は主にコンパイラーによって使用されるということです。
ベストアンサー1
API: アプリケーション プログラム インターフェース
これは、アプリケーション/ライブラリから公開するパブリック型/変数/関数のセットです。
C/C++ では、これはアプリケーションに同梱されるヘッダー ファイルで公開されるものです。
ABI: アプリケーションバイナリインターフェース
コンパイラはこのようにしてアプリケーションを構築します。コンパイラ
は次のようなものを定義します (ただし、これに限定されません)。
- パラメータが関数に渡される方法 (レジスタ/スタック)。
- スタックからパラメータを消去するのは誰か (呼び出し元/呼び出し先)。
- return の戻り値が配置される場所。
- 例外がどのように伝播するか。