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