이 두 용어가 같은 의미로 사용되는 경우가 있습니다.
이 두 용어의 실제 차이점은 무엇입니까? 어떻게 다르게 사용됩니까? 이 두 라이브러리에 대한 다른 대안이 있습니까?
댓글
- 여기에서 질문하기 전에 온라인 검색을 수행했다고 가정합니다. 지금까지 무엇을 찾았습니까? 그 정보가 귀하의 질문에 어떻게 답하지 않습니까? 귀하의 노력을 보여주기 위해 질문을 수정 하여 답변이 이미 알고있는 내용을 반복하지 않도록 ' . 참조 : 좋은 질문은 어떻게하나요?
답변
C 표준 라이브러리 는 C 프로그래밍 언어의 일부이므로 사양 (작성된 일부 기술 보고서에서 영어로). 예를 들어, n1570 문서는 malloc
가 무엇이며 어떻게 작동해야하는지 설명합니다.
또 다른 관련 사양 인 C POSIX 라이브러리 (C 표준 라이브러리의 상위 집합)도 있습니다. 예를 들어 dlopen
및 fork
는 모두 POSIX에 의해 지정되지만 C11 표준에서는 무시됩니다.
GNU glibc 라이브러리는 C 표준 라이브러리 및 C POSIX 라이브러리의 구현 (상위 집합)입니다. 무료 소프트웨어 (대부분 어셈블러를 사용하여 GCC 방언 용 용 C로 작성 됨)입니다. 시스템 호출 ( syscalls (2) 에 나열 됨)을 사용합니다. = “6ea2f4916a”>
커널 . musl-libc (또는 dietlibc a)와 같은 C 표준 라이브러리의 다른 구현을 사용할 수 있습니다. >).
libc
를 피하고 어셈블러 코드를 작성하여 커널에 직접 시스템 호출을 할 수 있습니다. 이 작업은 거의 수행되지 않습니다 (예 : Bones Scheme 컴파일러 또는 BusyBox ). 대부분의 프로그램은 libc
를 통해 시스템 호출을 수행하고 해당 libc
에서 제공하는 기능을 활용합니다. 따라서 libc
는 Linux 시스템의 초석입니다 …
그런데 GNU glibc는 표준 이외의 유용한 기능을 가지고 있습니다. 역 추적 함수 또는 프로그램 인수를 구문 분석 하는 몇 가지 추가 방법.
표준에서 요구하는 것과 실제로 발생하는 것 사이에 미묘한 차이가 있음에 유의하십시오 (예 : 메모리 오버 커밋 은 malloc
를 비표준 방식으로 사용하거나 Linux dlopen
에 POSIX 에 필요한 것보다 더 많은 플래그가 있습니다.
Linux의 man
페이지는 일반적으로 표준 준수가 함수 인 방법을 설명합니다. dlopen (3) 에서 예를 찾으세요.
답변
모든 C 구현은 표준 라이브러리를 제공해야하지만 모든 C 컴파일러가 FSF에 의해 작성된 것은 아닙니다! 따라서 GNU C 컴파일러는 GNU C 라이브러리를 사용하고 인텔의 C 컴파일러는 다른 표준 라이브러리 (덜 눈에 띄는 이름)를 사용합니다. 둘 다 C 표준에 필요한 표준 라이브러리의 인스턴스화입니다.
답변
“GNU”에 대해 “UNIX”를 읽으면 용어가 동일하기 때문에 오랫동안 서로 바꿔 사용할 수있었습니다.
BSD가 착수 할 때까지 AT & T의 UNIX 라이브러리는 THE C 라이브러리였습니다. THE C 컴파일러 (대부분).
BSD 이후에는 System V UNIX, BSD UNIX, GNU (GNU s Not Unix)가 있었고 곧 C 컴파일러가 등장했습니다. 모든 곳에서 표준 라이브러리를 자체적으로 구현합니다.