Solaris libc 是否基于 GNU libc?

fli*_*liu 6 linux solaris glibc

在 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;
}
Run Code Online (Sandbox Code Playgroud)
cc basename.c
ldd a.out
Run Code Online (Sandbox Code Playgroud)

输出?

libc.so.1 => /lib/libc.so.1
libm.so.1
......
Run Code Online (Sandbox Code Playgroud)

在 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;
}
Run Code Online (Sandbox Code Playgroud)
gcc basename.c
ldd a.out
Run Code Online (Sandbox Code Playgroud)

输出?

libc.so.6 => /lib/libc.so.6 
......
Run Code Online (Sandbox Code Playgroud)

Solaris libc 是否基于 GNU libc?是libc.so.1在Solaris一样libc.so.6在Linux上?

Sco*_*ung 16

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() 是最明显的。

  • 顺便说一句,有 [libbsd](http://libbsd.freedesktop.org/) 可以使用源自 BSD 的库函数,例如 Linux 下的 `strlcpy()` 或其他没有强烈 BSD 影响的系统。 (2认同)

Mik*_*kel 5

为什么?因为他们都自称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.
 */
Run Code Online (Sandbox Code Playgroud)

所以很明显代码不是来自 GNU。