2013-02-14 4 views
3

C 라이브러리는 다른 버전으로 컴파일 된 라이브러리 또는 (때로는) 심지어 다른 컴파일러와도 섞이는 데 거의 문제가 없을 것입니다. 그리고 많은 언어가 직접 또는 최소한의 노력으로 C 라이브러리와 인터페이스 할 수있는 것처럼 보입니다.C 표준의 ABI 부분입니까?

ABI가 표준이기 때문에이 모든 것입니까?

+0

softfp ABI로 빌드 된 라이브러리와 ARM 플로피 ABI로 빌드 된 응용 프로그램을 ARM 시스템에서 결합 해보십시오. 당신은 놀라게 될 것입니다. – aragaer

+0

MinGW 및 MSVC 컴파일 코드는 종종 함께 작동하는 데 문제가 있습니다. http://www.mingw.org/category/wiki/msvc 그리고이 문제는 다른 곳에서도 많이 보였습니다. 표준 조언은 동일한 툴체인으로 모든 것을 구축하는 것입니다. –

답변

1

ABI는 Operatingsystem 및/또는 toolchain에 의해 정의되며 표준에 의해 정의되지 않습니다. 예를 들어 params가 함수 호출에 전달되는 방법을 정의합니다. 스택 프레임의 레이아웃이나 시스템 호출의 호출 방법.

대부분의 운영 체제가 C로 작성되어 C 라이브러리를 API로 표시하고이를 기반으로 ABI를 정의하기 때문에 대부분의 언어가 C 라이브러리와 인터페이스 할 수있는 이유가 가장 많습니다. 특정 언어로 작성된 라이브러리가 특정 OS와 인터페이스를 원한다면이 OS의 ABI를 인터페이스 할 수 있어야합니다.

+0

이것이 C 인터페이스에 보편적으로 액세스 할 수있는 이유를 설명하는 유일한 대답이기 때문에 받아 들여집니다. – baruch

2

ABI는 가장 확실하게 표준이 아닙니다. 적어도 C 표준에는 없습니다. 각 운영 체제 또는 도구 체인은 이러한 사항을 지정하지만 언어 자체는 지정하지 않습니다. 예를 들어 Linux 컴퓨터에서 Windows 프로그램을 실행 해보십시오.

7

ABI는 언어 표준으로 성문화되지 않았습니다. C 표준 초안을 직접 볼 수 있습니다.

ABI가 표준에 포함되지 않은 이유가 있습니다. 표준은 C 컴파일러가 구현 될 수있는 모든 하드웨어와 OS를 아무리 예측할 수 없습니다.

1

ABI는 C 표준의 일부가 아닙니다. 그러나 ABI를 표준화하려는 노력이있었습니다. "Linux System Programming"에서 인용 :

을 여러 번 시도는 여러 운영 체제에서 tecture 아키 (특히 유닉스 시스템에서 i386을위한)에 노력이 만난하지 않은 주어진에 대해 하나의 ABI를 정의에서 수행되었지만 많은 성공. 대신, 운영 체제 -Linux 이 포함 된 운영 체제는 자신 만의 ABI를 정의하는 경향이 있습니다.