Programing

우리 리눅스 앱에서 libc(glibc)의 역할은?

c10106 2022. 5. 22. 10:59
반응형

우리 리눅스 앱에서 libc(glibc)의 역할은?

다음을 사용하여 프로그램을 디버그할 때gdb, 우리는 보통 이상한 이름을 가진 기능들을 본다.libc(glibc?). 나의 질문은 다음과 같다.

  1. 이다libc/glibc다음과 같은 일부 표준 C/C++ 기능의 표준 구현strcpy,strlen,malloc?
  2. 아니면, 위에서 설명한 최초의 용법뿐만 아니라 다음과 같은 Unix/Linux 시스템 호출의 래퍼에 해당하는가?open,close,fctl?그렇다면 왜 syscall을 직접 발행할 수 없는가?libc?
  3. 한다libc하나의 lib로만 구성된다(.a또는.so) 파일 또는 많은 lib 파일(이 경우,libc이 libs의 총칭은 libs)인가?lib 파일이 있는 위치
  4. 와의 차이점은 무엇인가?libc그리고glibc?

libc다음과 같은 두 가지 표준 C 기능 구현strcpy()및 다음과 같은 POSIX 기능(시스템 호출일 수 있음)getpid(). 모든 표준 C 함수가 에 있는 것은 아니다.libc- 대부분의 산술 함수가 다음 위치에 있음libm.

커널에 대한 호출은 정상적인 함수 호출이 아니기 때문에 링커로 해결할 수 없기 때문에 당신은 당신이 정상 함수라고 부르는 것과 같은 방법으로 직접 시스템 통화를 할 수 없다.대신, 커널을 호출하기 위해 아키텍처별 조립 언어 thunk가 사용된다. 물론 당신은 이것들을 당신의 프로그램에서도 직접 쓸 수 있지만, 당신은 그럴 필요가 없다.libc널 위해 그것들을 제공해줄거야.

Linux에서는 커널과 커널의 조합에 주목하십시오.libcPOSIX API를 제공한다. libc모든 POSIX 함수가 반드시 시스템 호출인 것은 아니며, 커널 동작이 항상 POSIX를 준수하는 것은 아니다.

libc단일 라이브러리 파일(둘 다).so그리고.a버전이 제공됨) 및 대부분의 경우/usr/lib그러나 glibc(GNU libc) 프로젝트는 그 이상의 것을 제공한다.libc- 또한 다음과 같은 기능을 제공한다.libm앞서 언급된 것과 같은 다른 핵심 도서관들libpthread그래서.libcglibc가 제공하는 라이브러리 중 하나일 뿐이며, 다른 대체 구현이 있다.libcglibc 이외의

처음 두 개와 관련하여, glibc는 C 표준 라이브러리(예: "표준 C 함수")와 시스템 호출을 위한 포장지다.컴파일러가 방법을 모르기 때문에 직접 시스템 전화를 걸 수 없다. glibc는 시스템 전화를 걸 때 필요한 "글루(glue)"를 포함하고 있는데, 이 글루(glue)는 조립으로 작성되어 있다. (자체 재구성은 가능하지만, 가치보다 훨씬 더 문제가 있다.)

(C++ 표준 도서관은 별개의 것이다, 라고 한다.libstdc++.)

glibc는 싱글이 아니다..so(문자 라이브러리) 파일 -- 무리지어 있지만, libc와 libm이 가장 많이 사용되는 두 가지 파일이다.모든 정적 및 동적 라이브러리가 다음 위치에 저장됨/lib.

libc는 모든 C 표준 라이브러리를 가리키는 데 사용되는 총칭으로, 몇 개가 있다.glibc는 가장 흔하게 사용되는 것이다; 다른 것들은 eglibc, uclibc, dietlibc를 포함한다.

그것은 "표준 도서관"이다.그것은 정확히 윈도우 세계의 "MSVCRTL"과 같다.

Gnu 표준 라이브러리("glibc")는 리눅스 시스템에서 가장 일반적으로(거의 보편적으로?) libc를 구현하는 것이다.다음은 기존 SusE 리눅스 시스템에 대한 관련 파일:

ls -l /lib =>
-rwxr-xr-x  1 root root 1383527 2005-06-14 08:36 libc.so.6

ls -l /usr/lib =>
-rw-r--r--  1 root root 2580354 2005-06-14 08:20 libc.a
-rw-r--r--  1 root root     204 2005-06-14 08:20 libc.so

이 링크는 추가 질문(전체 및 전체 GLibc 소스 코드에 대한 참조 포함)에 답변해야 한다.

셸에 아래와 같이 복사한 "man libc"를 입력하여 Linux sytem의 man 페이지에서 "libc"와 "glibc"에 대한 자세한 정보를 확인할 수 있다.

LIBC(7)      Linux Programmer's Manual      LIBC(7)   

NAME
       libc - overview of standard C libraries on Linux

DESCRIPTION
       The term "libc" is commonly used as a shorthand for the "standard C library", a library of standard functions that can be
       used by all C programs (and sometimes by programs in other languages).  Because of some history (see below), use  of  the
       term "libc" to refer to the standard C library is somewhat ambiguous on Linux.

   glibc
       By  far  the most widely used C library on Linux is the GNU C Library ⟨http://www.gnu.org/software/libc/⟩, often referred
       to as glibc.  This is the C library that is nowadays used in all major Linux distributions.  It is  also  the  C  library
       whose details are documented in the relevant pages of the man-pages project (primarily in Section 3 of the manual).  Doc‐
       umentation of glibc is also available in the glibc manual, available via the command info libc.  Release 1.0 of glibc was
       made in September 1992.  (There were earlier 0.x releases.)  The next major release of glibc was 2.0, at the beginning of
       1997.

       The pathname /lib/libc.so.6 (or something similar) is normally a symbolic link that points to the location of  the  glibc
       library,  and executing this pathname will cause glibc to display various information about the version installed on your
       system.

   Linux libc
       In the early to mid 1990s, there was for a while Linux libc, a fork of glibc 1.x created by  Linux  developers  who  felt
       that  glibc  development  at  the  time  was  not  sufficing for the needs of Linux.  Often, this library was referred to
       (ambiguously) as just "libc".  Linux libc released major versions 2, 3, 4, and 5 (as well as many minor versions of those
       releases).  For a while, Linux libc was the standard C library in many Linux distributions.

       However, notwithstanding the original motivations of the Linux libc effort, by the time glibc 2.0 was released (in 1997),
       it was clearly superior to Linux libc, and all major Linux distributions that had been using  Linux  libc  soon  switched
       back to glibc.  Since this switch occurred long ago, man-pages no longer takes care to document Linux libc details.  Nev‐
       ertheless, the history is visible in vestiges of information about Linux libc that remain in some manual pages,  in  par‐
       ticular, references to libc4 and libc5.

참조URL: https://stackoverflow.com/questions/11372872/what-is-the-role-of-libcglibc-in-our-linux-app

반응형