Solaris libc は GNU libc に基づいていますか?

Solaris libc は GNU libc に基づいていますか?

Solarisの場合:

ベース名.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
......

Linuxの場合:

ベース名.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 に基づいていますか? Solaris ではLinuxlibc.so.1と同じですか?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 リリースからフォークしたものです。

2 つのライブラリにはいくつかの違いがあることに気づくでしょう。たとえば、Solaris libc には glibc にはないいくつかの文字列操作が含まれており、strlcpy()これが私にとって最も明白です。

追加メモ(10年以上後):strlcpy()そしてstrlcat()glibc2.38 より

答え2

なぜですか? どちらも自分たちを と呼んでいるからですlibc

いいえ。

これら両方が呼ばれるlibcのは、GNU libcがプロプライエタリなUnix上の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 に基づいているわけではありませんが、同様のインターフェースを提供します。

関連情報