在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.1
Solaris 上跟 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,但它們提供類似的介面。