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,但它们提供类似的接口。

相关内容