亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 1933 | 回復(fù): 4
打印 上一主題 下一主題

[Linux] gcc為什么要包含基礎(chǔ)C庫(kù) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-10-28 17:36 |只看該作者 |倒序?yàn)g覽
gcc是Linux系統(tǒng)的編譯器,glibc是Linux的運(yùn)行庫(kù),那么gcc為什么也要實(shí)現(xiàn)glibc中的基礎(chǔ)函數(shù)呢?比如gcc/string/包含了字符串相關(guān)的函數(shù),gcc/stdio-common/包含了I/O函數(shù)。glibc已經(jīng)實(shí)現(xiàn)了這些基礎(chǔ)函數(shù),gcc直接調(diào)用glibc中的函數(shù)不行嗎?程序運(yùn)行時(shí)(假設(shè)時(shí)靜態(tài)鏈接)到底執(zhí)行的是哪里的函數(shù)?下面這段程序編譯時(shí)會(huì)報(bào)警告信息
// hello.c
int main()
{
        printf("hello world\n");
        return 0;
}
警告信息如下:
[root@mail test]# gcc -o hello hello.c
hello.c: 在函數(shù)‘main’中:
hello.c:4:2: 警告:隱式聲明與內(nèi)建函數(shù)‘printf’不兼容
這里內(nèi)建函數(shù)就是gcc中的函數(shù)吧?這條警告信息是由于沒有包含頭文件stdio.h造成的,是否hello.c中包含了頭文件就使用glibc中的函數(shù),不包含頭文件就使用gcc中的函數(shù)?我看了下glibc和gcc中printf()的實(shí)現(xiàn)過程,二者完全一致,為什么會(huì)出現(xiàn)不兼容的警告信息呢?不光printf(),其他函數(shù)在gcc和glibc中的實(shí)現(xiàn)基本都一致,只是一小些細(xì)節(jié)有出入,我猜是由于版本不同造成的,也就是說gcc和glibc中基礎(chǔ)庫(kù)是同一套代碼。還是回到最初的問題:gcc不是一個(gè)編譯器嗎,為什么要包含基礎(chǔ)庫(kù)函數(shù)呢?非常感謝。

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
2 [報(bào)告]
發(fā)表于 2013-11-01 12:28 |只看該作者
ycnian 發(fā)表于 2013-10-28 17:36
gcc是Linux系統(tǒng)的編譯器,glibc是Linux的運(yùn)行庫(kù),那么gcc為什么也要實(shí)現(xiàn)glibc中的基礎(chǔ)函數(shù)呢?比如gcc/stri ...

其中一個(gè)目的是為了優(yōu)化,例如若函數(shù)調(diào)用的結(jié)果在編譯時(shí)就可以確定,那就在編譯時(shí)直接調(diào)用這個(gè)函數(shù),只保留結(jié)果就可以了,這樣就不需要在運(yùn)行時(shí)再調(diào)用一次了(若動(dòng)態(tài)鏈接的話這種調(diào)用的開銷還是蠻高的)。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-11-18 09:45 |只看該作者
C 語言不提供內(nèi)建的input/output, memory management,string manipulation etc. 這些函數(shù)是定義在一個(gè)標(biāo)準(zhǔn)庫(kù)中的。GNU C library實(shí)現(xiàn)了ISO C standard 和Posix 和GNU 擴(kuò)展中定義的函數(shù)。所以glibc不只是linux的運(yùn)行時(shí)庫(kù)。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-11-18 21:47 |只看該作者
gcc不止用于linux,而是支持大多數(shù)操作系統(tǒng),包括windows。

內(nèi)建這些玩意其實(shí)是向前兼容那些在c標(biāo)準(zhǔn)之前的非標(biāo)準(zhǔn)代碼

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-11-19 17:08 |只看該作者
本帖最后由 braveyly 于 2013-11-19 17:09 編輯

在網(wǎng)上找到的兩段話,或許有點(diǎn)提示:
(1)
gcc 是編譯器,基本上 Linux 下所有的程序(包括內(nèi)核)都是 gcc 編譯的,libc 當(dāng)然也是。
gcc 和 libc 是互相依賴的兩個(gè)軟件,它們合作的方式類似 Linux 系統(tǒng)的 "自舉"。先在一個(gè)可以運(yùn)行的帶有老 libc 和 gcc 的系統(tǒng)上,用老 gcc 編譯出一個(gè)新版本的 gcc + 老 libc,再用這個(gè)新 gcc 編譯出一個(gè)新 gcc + 新 libc,再用這套東東編譯整個(gè)新系統(tǒng)。
(2)
上個(gè)月的一篇博文《glibc-2.10.1頭文件string.h帶來的問題》提到在更新了glibc之后,不少地方編譯都會(huì)出現(xiàn)問題。這一現(xiàn)象在我以前升級(jí)glibc-2.3.5的時(shí)候也遇見不少。再次碰到以后思忖良久,覺得還是應(yīng)該再次編譯gcc嘗試一把。我的系統(tǒng)是首先在glibc-2.3.5環(huán)境下升級(jí)到gcc-4.4.0的,之后在gcc-4.4.0和glibc-2.3.5的環(huán)境下編譯了glibc-2.10.1,并成功升級(jí),但并未再次編譯gcc-4.4.0。于是再次在gcc-4.4.0和glibc-2.10.1環(huán)境下重新編譯gcc-4.4.0,update之后換回原版的string.h,再未出現(xiàn)類似的編譯問題。
    感覺glibc和gcc兩者就像一個(gè)連環(huán)套,真是奇妙啊。


也許:glibc和gcc互為基礎(chǔ),都需要一套實(shí)現(xiàn)
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP