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 的嗎?libc.so.1Solaris 上跟 Linux 上一樣嗎libc.so.6

答案1

Solaris C 函式庫不基於 GNU C 函式庫。它們都實現了 C 標準和 POSIX 介面以及其他一些標準,但除此之外它們沒有共同的傳統。

Solaris libc.so.1 的歷史可以追溯到 AT&T 系統 VC 函式庫。

GNU libc.so.6 是基於 glibc 2.0 或更高版本。 Linux C 函式庫的早期版本(例如 libc.so.5)是早期 glibc 1.x 版本的分支。

你會發現這兩個庫之間存在一些差異。例如,Solaris libc 包含一些 glibc 不包含的字串操作,strlcpy()這對我來說是最明顯的。

附加說明(十多年後):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,但它們提供類似的介面。

相關內容