web-dev-qa-db-ja.com

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

Solarisの場合:

basename.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の場合:

basename.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 
......

SolarislibcはGNU libcに基づいていますか?Solarisのlibc.so.1はLinuxのlibc.so.6と同じですか?

6
fliu

SolarisCライブラリはGNU Cライブラリに基づいていません。どちらもC標準とPOSIXインターフェイス、およびその他のいくつかの標準を実装していますが、それ以上の共通の遺産を共有していません。

Solaris libc.so.1は、その履歴をAT&T System VCライブラリにトレースします。

GNU libc.so.6は、glibc2.0以降に基づいています。 Linux Cライブラリの以前のバージョン(libc.so.5など)は、以前のglibc1.xリリースのフォークでした。

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

15
Scott McClung

SolarislibcはGNU libcにまったく基づいていませんが、同様のインターフェースを提供します。

3
jlliagre

どうして?どちらも自分自身をlibcと呼んでいるからですか?

番号。

GNU libcはプロプライエタリUnices上のlibcの互換性のある代替品になろうとしているため、どちらもlibcと呼ばれます。これは LGPLライセンスが作成された理由 =。

簡単なWeb検索では、 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
Mikel