Solaris libc는 GNU libc를 기반으로 합니까?

Solaris libc는 GNU libc를 기반으로 합니까?

솔라리스:

기본 이름.c

#include <stdio.h>
#include <libgen.h>

int main(int argc, char* argv[])
{
    int len = strlen(argv[0]);
    char *bsname = basename(argv[0]);
    printf("%s\n", bsname);
    printf("%d\n", len);
    return 0;
}
cc basename.c
ldd a.out

산출:

libc.so.1 => /lib/libc.so.1
libm.so.1
......

리눅스에서:

기본 이름.c

#include <stdio.h>
#include <libgen.h>

int main(int argc, char* argv[])
{
    int len = strlen(argv[0]);
    char *bsname = basename(argv[0]);
    printf("%s\n", bsname);
    printf("%d\n", len);
    return 0;
}
gcc basename.c
ldd a.out

산출:

libc.so.6 => /lib/libc.so.6 
......

Solaris libc는 GNU libc를 기반으로 합니까? libc.so.1Solaris는 libc.so.6Linux 와 동일 합니까 ?

답변1

Solaris C 라이브러리는 GNU C 라이브러리를 기반으로 하지 않습니다. 둘 다 C 표준과 POSIX 인터페이스 및 기타 표준을 구현하지만 그 이상의 공통 유산을 공유하지는 않습니다.

Solaris libc.so.1은 AT&T System VC 라이브러리에 대한 기록을 추적합니다.

GNU libc.so.6은 glibc 2.0 이상을 기반으로 합니다. Linux C 라이브러리의 이전 버전(예: libc.so.5)은 이전 glibc 1.x 릴리스의 포크였습니다.

두 라이브러리 간에는 약간의 차이가 있음을 알 수 있습니다. 예를 들어, Solaris libc에는 glibc에 포함되지 않은 일부 문자열 작업이 포함되어 있는데, strlcpy()이는 제가 보기에 가장 분명합니다.

추가 참고 사항(10여 년 후): strlcpy()그리고 strlcat()앞으로glibc 2.38

답변2

왜? 둘 다 자신을 부르기 때문에 libc?

아니요.

libcGNU libc가 독점 Unices의 libc에 대한 호환 가능한 대체 기능을 시도하기 때문에 둘 다 호출됩니다 . 이것은LGPL 라이센스가 만들어진 이유.

빠른 웹 검색을 통해 일부 내용을 확인할 수 있습니다.Solaris libc의 소스 코드. 선발파일무작위로 거기에 있는 저작권 메시지에는 다음과 같은 내용이 나와 있습니다.

/*  Copyright (c) 1988 AT&T */
/*    All Rights Reserved   */


/*
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

따라서 코드가 GNU에서 나온 것이 아니라는 것이 꽤 분명할 것입니다.

답변3

Solaris libc는 GNU libc를 전혀 기반으로 하지 않지만 유사한 인터페이스를 제공합니다.

관련 정보