프로그래밍/리눅스 프로그래밍

[linux] libc 와 glibc 와 libstdc++ 와 gcc의 관계 정리

jinkwon.kim 2022. 10. 19. 14:49
728x90
반응형

개념 정리 

libc 

    최초의 libc, 이것이 원래의 고대 표준 라이브러리 구현체입니다.

현재는 libc는  "표준 C 라이브러리"를 말하는 대 명사처럼 사용 됩니다.

glibc

    glibc는 GNU에서 만든 libc 입니다.

glibc는 리눅스 시스템에서 가장 저수준의 API이며 거의 모든 runtime library가 glibc에 의존합니다.

예를 들면 c코드에서 fopen 함수를 사용하면 시스템에서 sys_open이 트리거 되고 중간 처리를 해주는 것이 glibc입니다.

glibc 자체는 시스템 호출을 캡슐화하는 것 말고도 문자열, malloc, linuxthread, locale, signal등과 같은 상위 레벨 응용 프로그램에 필요한 기능을 제공합니다

libc++

    libc++는 Clang 프로젝트에서 나온 C++ native 라이브러리 입니다. 
mac 환경의 기본 C++ Library 입니다.

libc++는 clang 컴파일러를 위해 재작성된 C++ Standard Library입니다.

 

libstdc++

    libstdc++는 GCC 프로젝트에서 나온 C++ native 라이브러리이다.

linux 환경의 기본 C++ library 입니다. 

libstdc++은 C++ 프로그래밍 언어를 위한 표준 라이브러리로서, GCC (GNU Compiler Collection)의 일부분입니다. 따라서 libstdc++ 라이브러리를 사용하기 위해서는 GCC가 설치되어 있어야 합니다.

clang

    libc++를 사용하여 compile합니다. 

GCC

    glibc와 libstdc++ 사용하여 compile 합니다.

glibc와 libstdc++ 관계

glibc와 비교하여 libstdc++는 표준 C++ 프로그램 라이브러리를 제공하지만 커널을 처리하지는 않습니다. 

즉 추상화 수준이 다르죠. 시스템 수준 이벤트의 경우 libstdc++는 먼저 커널과 통신하기 전에 glibc와 상호 작용을 합니다. 

고로 glibc와 비교할 때 libstdc++는 좀 더 상위 레벨이 라이브러리죠.

libstdc++에서 지원하는 libc 버전 확인

#strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep -i glib

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.14
GLIBC_2.6
GLIBC_2.4ㅏ
GLIBC_2.18
GLIBC_2.16
GLIBC_2.3.4
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

libstdc++와 gcc 관계

libstdc++와 gcc는 함께 번들로 제공되므로 gcc가 설치될 때 libstdc++가 설치됩니다.

libstdc++에서 GLIBC를 미지원 할 경우 발생하는 오류

glibc 오류 

# ./sample
./sample: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./sample)

 

libstdc++에서 지원하는 glibc 버전 확인

# strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep -i glib
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.14
GLIBC_2.4
GLIBC_2.18
GLIBC_2.16
GLIBC_2.3.4
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

 

728x90
반응형

'프로그래밍 > 리눅스 프로그래밍' 카테고리의 다른 글

[Hook ] LD_PRELOAD  (0) 2023.07.05
[stress] stress 사용법  (0) 2023.02.28
[리눅스] thread 및 process에 CPU Core 할당 하기  (1) 2022.09.30
[GCC] gcc option 설명  (1) 2022.09.19
[GIT] cheat sheet  (0) 2022.07.27