?? gcc-howto.txt
字號(hào):
The Linux GCC HOWTO中譯版V0.2 作者: Daniel Barlow <dan@detached.demon.co.uk>譯者: 陳建勛(Frank J.S. Chen)<frank63@ms5.hinet.net> v1.17, 28 February 1996 _________________________________________________________________ 本文闡述安裝GNU C編譯器和程式館的方法,同時(shí)概觀(guān)地說(shuō)明程式的編譯、連結(jié)、 執(zhí)行、除錯(cuò)的過(guò)程以及可能面臨的諸多問(wèn)題。寫(xiě)作的參考資料泰半來(lái)自於Mitch D'Souza先生所收集的GCC-FAQ;而另一個(gè)來(lái)源是ELF-HOWTO。此份HOWTO可以說(shuō)已 代替了GCC-FAQ,而且即將要永久替代ELF-HOWTO了。此乃GCC-HOWTO第一份公開(kāi)發(fā) 行的版本(不須理會(huì)版本序號(hào);那是RCS的杰作),有任何指正與建議的,本人都 很歡迎。 _________________________________________________________________ 1. 行遠(yuǎn)必自邇! * 1.1 譯者的話(huà) * 1.2 動(dòng)與靜 * 1.3 作者的私語(yǔ) * 1.4 印刷與排版 2. 東東在哪兒? * 2.1 GCC-HOWTO在哪兒? * 2.2 GCC相關(guān)的資料又在哪兒? * 2.3 GCC * 2.4 C程式館與標(biāo)頭檔 * 2.5 有關(guān)聯(lián)的工具 (as, ld, ar, strings etc) 3. GCC的安裝與GCC的設(shè)定 * 3.1 GCC的版本 * 3.2 東東裝好後都到哪兒去了? * 3.3 標(biāo)頭檔ㄋㄟ?標(biāo)頭檔ㄋㄟ? * 3.4 建立交叉編譯器(Building cross compilers) 4. 移植程式與編譯程式 * 4.1 gcc自行定義的符號(hào) * 4.2 線(xiàn)上求助說(shuō)明 * 4.3 移植能力 5. 除錯(cuò)與監(jiān)管 * 5.1 預(yù)防重於治療(lint) * 5.2 除錯(cuò) * 5.3 監(jiān)管 6. 連結(jié) * 6.1 共享程式庫(kù) vs靜態(tài)程式庫(kù) * 6.2 終極審判(‘sin() 在哪個(gè)程式庫(kù)里?’) * 6.3 X檔案? * 6.4 建立你自己的程式庫(kù) 7. 動(dòng)態(tài)載入 * 7.1 基本概念 * 7.2 錯(cuò)誤訊息 * 7.3 控制動(dòng)態(tài)載入器的運(yùn)作 * 7.4 以動(dòng)態(tài)載入撰寫(xiě)程式 8. 與發(fā)展人士聯(lián)絡(luò) * 8.1 Bug報(bào)表 * 8.2 協(xié)助發(fā)展 9. 結(jié)語(yǔ) * 9.1 名人榜 * 9.2 翻譯 * 9.3 歡迎任何的回饋 * 9.4 合法的行逕規(guī)定 10. 索引 _________________________________________________________________ 1. 行遠(yuǎn)必自邇!1.1 譯者的話(huà) * 這份譯文為L(zhǎng)inux document projects(LDP)中文翻譯計(jì)畫(huà)系列之一。目前之 網(wǎng)址為 [1]http://www.linux.org.tw/CLDP/,歡迎各位網(wǎng)友踴躍投入此一計(jì) 畫(huà)。 * 我并沒(méi)有完全按照原文逐字翻譯。為了力求譯文通暢可讀,我會(huì)稍稍的重組 一部份的文字,加油添醋,或是精簡(jiǎn)原文;這樣做的話(huà),可以彌補(bǔ)中英文間 語(yǔ)法結(jié)構(gòu)的差異性,且語(yǔ)氣可以貫通無(wú)礙。 * 一些關(guān)鍵字與專(zhuān)業(yè)詞匯等,會(huì)附加上原文單字。 * 遇有轉(zhuǎn)譯困難,唯原文常見(jiàn)的字匯如bugs、shadow password、padding 、image之類(lèi)的,則保留原文不變。若閣下對(duì)這些字匯有適當(dāng)譯辭的,請(qǐng)不吝 指教。 * 內(nèi)文中若遇有"[譯者注:**]"之標(biāo)記,則為本人額外之注解。 * 對(duì)這篇譯文有任何建議與疑問(wèn)的,請(qǐng)email至frank63@ms5.hinet.net。 * WWW Home Page: [2]http://linux.ntcic.edu.tw/~jsfrank/。 * 此中譯文件之翻譯權(quán)已取得英籍之原作者Daniel Barlow 先生之同意;另, 陳建勛先生保有此份中譯版文件所有的權(quán)利,你可以任意的拷貝,以各種媒 體散布這份中譯文件,唯此節(jié)補(bǔ)充說(shuō)明需原封不動(dòng)附上,且不可任意更動(dòng)譯 文。 * v0.1版的譯文相當(dāng)粗糙,連文句的語(yǔ)法結(jié)構(gòu)都嫌太過(guò)於松散,v0.2版針對(duì)中 文的用字習(xí)慣來(lái)修正,并將上一版譯的不妥當(dāng)?shù)牡胤叫拚^(guò)來(lái),例如either 這個(gè)字,英國(guó)人常把either當(dāng)名詞用,指兩者中任意一個(gè);這份HOWTO就充份 反應(yīng)出這個(gè)用字習(xí)性,跟美語(yǔ)有基本上的差異。 * 文中有幾句話(huà)沒(méi)有譯出來(lái),一方面是看不懂,另方面是直譯也譯不出來(lái),所 以只好保留原文了,要是閣下有新的領(lǐng)悟的,無(wú)論如何請(qǐng)告訴我。 * v0.1版翻譯起始日期為:11/7/97;截止日期為:11/19/97。 * v0.2版修正起始日期:5/13/98;截止日期為:6/3/98。 1.2 動(dòng)與靜 目前Linux的發(fā)展正波濤洶涌的進(jìn)行著。簡(jiǎn)單一點(diǎn)講,Linux有兩種執(zhí)行檔的格式 可用,取決於你的系統(tǒng)是怎麼整合起來(lái)的;你的Linux應(yīng)該是其中一種吧!閱讀這 份文件,可以幫助你□清執(zhí)行檔的類(lèi)別。 要如何區(qū)別呢?執(zhí)行公用程式‘file’(例如,file /bin/bash)就對(duì)了。 就ELF的程式而言,螢?zāi)簧巷@示出來(lái)的訊息會(huì)含有ELF的字眼;如果說(shuō)是a.out的, 訊息內(nèi)會(huì)箝有 Linux/i386的字樣。 ELF與a.out格式的差異之處會(huì)在後續(xù)的章節(jié)中討論(很廣泛喔!)。ELF是比較新 的格式,一般而言,接受的程度較佳。 1.3 作者的私語(yǔ) 版權(quán)說(shuō)明與合法的行逕規(guī)定,就擺在這份文件的尾端。除此之外,我還有一些不 得不提醒你的話(huà)要講。就算你□著沒(méi)事干,也不要在Usenet上丟一些呆瓜問(wèn)的問(wèn) 題;還有,不要老以為自己C語(yǔ)言的功力深厚,專(zhuān)門(mén)發(fā)表一些不是bugs的bugs出來(lái) 丟人現(xiàn)眼,這不就等於告訴別人你不學(xué)無(wú)術(shù),在關(guān)老爺面前耍大刀了嗎?所以說(shuō) 自以為是的英雄主義是得不償失的。 1.4 印刷與排版 如果你現(xiàn)在讀的是Postscript、dvi或是html格式,那麼你所看到的字型變化就會(huì) 比只讀純文字格式的人多一些。特別是檔案名稱(chēng)、命令、命令的輸出與摘錄出來(lái) 的原始碼等,統(tǒng)統(tǒng)都是打字機(jī)的字型。這樣做的話(huà),對(duì)於某些需要強(qiáng)調(diào)的‘變數(shù) ’還有那些沒(méi)有固定結(jié)果的□例而言,就可以達(dá)到強(qiáng)調(diào)的效果了。 讀這份文件的同時(shí),你也會(huì)得到一套蠻有用的索引。假若是dvi、 postscript之 類(lèi)的版本,索引的數(shù)字就是章節(jié)(section)的編號(hào);如果是HTML的話(huà),這些數(shù)字會(huì) 按順序排列,你可以用滑鼠左鍵去連結(jié)相對(duì)的索引內(nèi)容;如果你看的是純文字版 本的話(huà), 數(shù)字就只是數(shù)字,沒(méi)別的含意;建議你趕快升級(jí)為妙哩! 我用的shell是Bourne shell(不是C shell),舉的例子自然是Bourne shell的 語(yǔ)法。如果你用的是C shell的話(huà),設(shè)定環(huán)境變數(shù)的語(yǔ)法會(huì)像下面這樣: % setenv FOO bar 要是用Bourne shell的話(huà),我會(huì)這樣子寫(xiě): $ FOO=bar; export FOO 如果提示符號(hào)顯示的是井字符號(hào)#而不是錢(qián)字符號(hào) $的話(huà),很有可能這個(gè)命令是只 適用於root而已。當(dāng)然啦,要是你試了這些□例,結(jié)果弄得你的系統(tǒng)發(fā)生災(zāi)變, 我可是一點(diǎn)責(zé)任也不會(huì)負(fù)的喔!祝好運(yùn)!:-) 11/8/97譯. 5/13/98修訂 2. 東東在哪兒?2.1 GCC-HOWTO在哪兒? 這份文件是Linux HOWTO系列之一,換句話(huà)說(shuō),你可以在所有存放Linux HOWTO文 件的網(wǎng)站上面找到她的芳蹤,例如 [3]http://sunsite.unc.edu/pub/linux/docs/HOWTO/。HTML的版本(可能會(huì)是較 新的版本)可以從 [4]http://ftp.linux.org.uk/~barlow/howto/gcc-howto.html上面抓下來(lái)。 2.2 GCC相關(guān)的資料又在哪兒? 標(biāo)準(zhǔn)的gcc說(shuō)明文件是隨附在發(fā)行的原始碼(source distribution)內(nèi)(往下看就 有了!),里頭有textinfo與.info兩種檔案。要是你的網(wǎng)路連接速率夠快,或是 有一片cdrom,不然,有高度的耐心也成,你可以自己把它untar,然後再把相對(duì) 應(yīng)的位元一一拷貝到/usr/info的目錄底下。假如你的條件與上述的不符,不妨到 [5]tsx-11站上去參觀(guān)參觀(guān)。不過(guò),我想,沒(méi)有必要老是惦記著最新的版本吧! libc的文件說(shuō)明有兩種來(lái)源。一種是GNU libc,以.info的格式儲(chǔ)存,除了stdio 之外,其馀Linux libc的說(shuō)明都相當(dāng)?shù)脑敱M精確。另一種可以在Linux的archive [6]manpages上找到系統(tǒng)呼叫(system call)(第2節(jié))與libc函數(shù)(function) (第3節(jié))的文件說(shuō)明。 2.3 GCC 解答有二: (a)你可以在 [7]ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/的網(wǎng)站上找 到 正式的Linux GCC發(fā)行系統(tǒng)(distribution),而且是已經(jīng)編譯好的可執(zhí)行檔。 當(dāng)我在寫(xiě)這份文件時(shí),2.7.2(gcc-2.7.2.bin.tar.gz)是最新的版本。 (b)自由軟體基金會(huì)(Free Software Foundation)所發(fā)布的GCC最新原始碼可以 從網(wǎng)站 [8]GNU archives上取得。沒(méi)有必要非得與上述的版本一致才行,不過(guò)這 個(gè)版本的確是目前最新的。Linux GCC的維護(hù)網(wǎng)友(maintainers)讓你可以很輕松 的自行編譯這個(gè)最新的版本。configure命令稿(script)會(huì)幫你自動(dòng)設(shè)定好所有該 做的事情。建議你有空不妨到 [9]tsx-11看看,說(shuō)不定會(huì)有修正的版本是你會(huì)想 要用的。 如果想要編寫(xiě)出一些有用的軟體(不是我羅唆,還是有不少?zèng)]啥用途的軟體在網(wǎng) 路上四處流竄。),下面這一小節(jié)所談的也是你需要的: 2.4 C程式館與標(biāo)頭檔 該選哪一套程式館是取決於(i)你的系統(tǒng)是ELF的或是a.out的;(ii)你希望你的系 統(tǒng)變成哪一種?如果你是從libc 4升級(jí)到libc 5,那麼給你一個(gè)良心的建議,先 去看看ELF-HOWTO再說(shuō)。你一定會(huì)問(wèn),在ELF文件的哪兒呢?嘿!嘿!不偏不倚, 就差不多跟這份文件相同的位置。網(wǎng)站 [10]tsx-11上面可以找到你想要的。 libc-5.2.18.bin.tar.gz --- ELF共享程式館(ELF shared library images),靜態(tài)程式館 (static libraries)與標(biāo)頭檔(針對(duì)C語(yǔ)言與數(shù)學(xué)程式館)。 libc-5.2.18.tar.gz ---libc-5.2.18.bin.tar.gz的原始碼。這個(gè)檔案你也需要,因?yàn)?bin.套 件(package)含有必需的標(biāo)頭檔。如果此時(shí)你正猶豫不決,不曉得是老身 親自下海,動(dòng)手編譯C程式庫(kù)比較好;還是直接用人家編譯好的二進(jìn)位 檔(binaries)就可以了。有這種困擾的人,來(lái),看我的嘴形:用人家編譯 好的二進(jìn)位檔不就解決了嘛!只有在你想要NYS或是shadow password的情 況下,才需要自己的手來(lái)推動(dòng)搖籃。 libc-4.7.5.bin.tar.gz --- 這個(gè)檔案是a.out的共享程式庫(kù)(shared library images)與靜態(tài)程式 庫(kù),用途是為了與前述的libc 5套件共存共榮而設(shè)計(jì)的,不過(guò)除非你想要 繼續(xù)使用a.out的程式或是繼續(xù)發(fā)展a.out的程式,不然的話(huà),是不需要它 的。 2.5 有關(guān)聯(lián)的工具 (as, ld, ar, strings etc) 到目前為止,與之前所談的都一樣,從網(wǎng)站 [11]tsx-11上,就可以找到這些工具 程式。目前的版本是binutils-2.6.0.2.bin.tar.gz。 需要注意的是binutils只適用於ELF,而且目前l(fā)ibc的版本也都是屬於ELF的;當(dāng) 然啦,習(xí)慣a.out的人如果有個(gè)ELF的libc與a.out的libc聯(lián)合起來(lái)一起使用,這對(duì) 他們來(lái)講是再好不過(guò)的美事了。不可否認(rèn)的,C程式館的發(fā)展正以堅(jiān)決的腳步邁 向ELF的格式,除非你真的有很好的理由,需要a.out的東東,不然啊,大家都會(huì) 鼓勵(lì)你勇於突破,趁早加入銳不可擋的大潮流。 11/9/97譯 3. GCC的安裝與GCC的設(shè)定3.1 GCC的版本
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -