Basiert die Solaris-Bibliothek auf der GNU-Bibliothek?

6

Unter 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

Ausgabe:

libc.so.1 => /lib/libc.so.1
libm.so.1
......

Unter 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

Ausgabe:

libc.so.6 => /lib/libc.so.6 
......

Basiert Solaris libc auf GNU libc? Ist libc.so.1unter Solaris dasselbe wie libc.so.6unter Linux?

fliu
quelle

Antworten:

15

Die Solaris C-Bibliothek basiert nicht auf der GNU C-Bibliothek. Beide implementieren die C-Standard- und POSIX-Schnittstellen sowie einige andere Standards, teilen jedoch kein gemeinsames Erbe.

Solaris libc.so.1 verfolgt seinen Verlauf in der AT & T System VC-Bibliothek.

GNU libc.so.6 basiert auf glibc 2.0 oder höher. Die früheren Versionen (z. B. libc.so.5) der Linux C-Bibliothek waren eine Abzweigung einer früheren Version von glibc 1.x.

Sie werden feststellen, dass es einen Unterschied zwischen den beiden Bibliotheken gibt. Zum Beispiel enthält Solaris libc einige Zeichenfolgenoperationen, die glibc nicht ausführt, wobei strlcpy () für mich am offensichtlichsten ist.

Scott McClung
quelle
2
Übrigens gibt es libbsd , um Bibliotheksfunktionen zu verwenden, die von BSD stammen, wie strlcpy()unter Linux oder anderen Systemen, die keinen starken BSD-Einfluss haben.
Maxschlepzig
Es sieht nicht so aus, als ob libbsd über opencsw verfügbar ist, obwohl dies bedeuten könnte, dass sie keine Anfrage / Notwendigkeit dafür hatten.
Brian Vandenberg
3

Solaris libc basiert überhaupt nicht auf GNU libc, bietet jedoch ähnliche Schnittstellen.

jlliagre
quelle
3

Warum? Weil sie sich beide nennen libc?

Nein.

Sie werden beide aufgerufen, libcweil GNU libc versucht, ein kompatibler Ersatz für libc auf proprietären Unices zu sein. Aus diesem Grund wurde die LGPL-Lizenz erstellt .

Eine schnelle Websuche zeigt einen Teil des Quellcodes für Solaris libc . Wenn Sie eine Datei nach dem Zufallsprinzip auswählen, heißt es in den Copyright-Meldungen

/*  Copyright (c) 1988 AT&T */
/*    All Rights Reserved   */


/*
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

Es sollte also ziemlich offensichtlich sein, dass der Code nicht von GNU stammt.

Mikel
quelle