솔라리스의 경우:
기본 이름.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.1
Linux와 Solaris가 동일합니까 libc.so.6
?
답변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
?
아니요.
libc
GNU 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를 전혀 기반으로 하지 않지만 유사한 인터페이스를 제공합니다.