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