Sto cercando di capire il concetto di Application binary interface (ABI).
Da Linux Kernel Primer :
An ABI is a set of conventions that allows a linker to combine separately compiled modules into one unit without recompilation, such as calling conventions, machine interface, and operating-system interface. Among other things, an ABI defines the binary interface between these units. ... The benefits of conforming to an ABI are that it allows linking object files compiled by different compilers.
Da Wikipedia :
an application binary interface (ABI) describes the low-level interface between an application (or any type of) program and the operating system or another application.
ABIs cover details such as data type, size, and alignment; the calling convention, which controls how functions' arguments are passed and return values retrieved; the system call numbers and how an application should make system calls to the operating system; and in the case of a complete operating system ABI, the binary format of object files, program libraries and so on.
- Mi chiedevo se l'ABI dipenda dal set di istruzioni e il sistema operativo. I due dipendono interamente da ABI?
-
Che tipo di ruolo gioca ABI nelle diverse fasi della compilazione: preelaborazione, conversione del codice da C a Assembly, conversione di codice da Assemblaggio a Codice macchina e collegamento?
Dalla prima citazione sopra, mi sembra che l'ABI sia necessario solo fase di collegamento, non le altre fasi. È corretto?
-
Quando è necessario prendere in considerazione l'ABI?
L'ABI deve essere considerato durante la programmazione in C, Assemblea o altre lingue? In caso affermativo, in che modo ABI e API sono diversi?
O è solo per linker o compilatore?
- L'ABI è specificato per / nel codice macchina, linguaggio Assembly, e / o di C?