日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

56 FreeBSD連載:手工編譯安裝程序

手工編譯安裝程序雖然使用Ports Collection編譯和安裝軟件非常簡(jiǎn)便,然而仍有兩個(gè)理由來(lái)使用手工編譯安裝方式 。一方面是Ports Collection中并不能涵蓋所有的軟件,有很多軟件沒有收入Ports Collection中 。有很多原因使得一些很優(yōu)秀的軟件沒有被收集入Ports Collection,例如,版權(quán)因素,或者沒有志愿者對(duì)它移植到FreeBSD進(jìn)行維護(hù) 。另一方面,即使是通過Port來(lái)定制軟件,仍需要了解了手工編譯安裝的過程和各種編譯工具的使用,才能正常進(jìn)行定制工作 。
【56 FreeBSD連載:手工編譯安裝程序】通常在FreeBSD下編譯并安裝應(yīng)用程序并不困難,因?yàn)镕reeBSD是一種非常標(biāo)準(zhǔn)的Unix,為Unix開發(fā)的標(biāo)準(zhǔn)C程序很容易就能在它上面編譯運(yùn)行 。
編譯和軟件工具
為了編譯和安裝一個(gè)應(yīng)用程序,必須要了解編譯和運(yùn)行軟件的一般方法 。對(duì)于大型程序和要求高效率的軟件,通常用高級(jí)語(yǔ)言C來(lái)開發(fā),使用C語(yǔ)言編譯器將C源程序編譯成執(zhí)行程序 。由于使用高級(jí)語(yǔ)言不依賴于硬件結(jié)構(gòu),這使得軟件非常容易移植 。Unix不僅提供了編譯器,而且還提供了眾多的工具來(lái)幫助進(jìn)行編譯和維護(hù),最有用的工具為make 。
GNU C與編譯連接過程
C作為一種編譯型的高級(jí)語(yǔ)言,這就是說運(yùn)行C程序之前要將其先編譯成可執(zhí)行的由機(jī)器指令構(gòu)成的執(zhí)行程序,因此就需要使用一個(gè)編譯器來(lái)對(duì)C源代碼進(jìn)行處理,F(xiàn)reeBSD使用的是GNU的C編譯器 。
$ cc hello.c$ ./a.outHello, world!UNIX下缺省使用a.out作為生成的文件名,可以使用-o參數(shù)指出生成的執(zhí)行文件名 。
事實(shí)上前面的編譯生成執(zhí)行文件的過程由兩步組成,一是生成目標(biāo)文件,通常使用.o為后綴,然后進(jìn)行連接生成執(zhí)行文件 。因此,可以使用ar將多個(gè)目標(biāo)文件組合成一個(gè)函數(shù)庫(kù)文件,而可以使用nm來(lái)查看庫(kù)文件的內(nèi)容 。
$ cc -c f1.c$ cc -c f2.c$ ar c mlib.a f1.o f2.o$ nm mlib.aFreeBSD使用的C語(yǔ)言編譯器gcc是一種非常流行的,多平臺(tái)、高效率的C語(yǔ)言編譯器,它提供了多種選項(xiàng)用于生成應(yīng)用軟件 。以下為常用的一些選項(xiàng):
-L定義連接庫(kù)文件的目錄-I 定義C源碼的頭文件的目錄-o后面跟的參數(shù)為要生成的執(zhí)行文件的名-O進(jìn)行編譯優(yōu)化,可以指定使用不同的優(yōu)化級(jí)別,從O2到O6,每個(gè)不同的級(jí)別使用的優(yōu)化設(shè)置不同 。
相關(guān)的選項(xiàng)還有定義生成的指令碼類型的參數(shù),如-m486生成486指令,缺省的gcc版本(2.7.2)不支持Pentium代碼 。-g 加入調(diào)試代碼,可以在完成后使用strip命令刪除用于調(diào)試的信息-c僅僅進(jìn)行編譯而不進(jìn)行連接,生成目標(biāo)文件-fPic生成相對(duì)地址的代碼,用于最后生成動(dòng)態(tài)連接庫(kù)-static強(qiáng)制生成靜態(tài)連接的程序-aout生成a.out格式的執(zhí)行文件、目標(biāo)代碼等,缺省使用ELF格式-elf3.0之后為缺省設(shè)置,生成ELF格式的目標(biāo)和執(zhí)行代碼
可以通過命令行參數(shù)查看當(dāng)前使用的GNU C編譯器的版本:
$ cc –versionGcc version 2.7.2.1FreeBSD當(dāng)前使用GNU的C編譯器gcc的版本為gcc 2.7.2.1,這不是gcc編譯器的最新版本,但穩(wěn)定性非常好 。雖然當(dāng)前新版本的gcc 2.8已經(jīng)很穩(wěn)定了,但是由于編譯器在系統(tǒng)中的重要性,編譯器出現(xiàn)問題會(huì)造成系統(tǒng)的穩(wěn)定問題,因此FreeBSD還沒有轉(zhuǎn)向gcc 2.8 。另一個(gè)沒有完全使用gcc 2.8的重要原因是生成的執(zhí)行文件格式問題,gcc 2.8不再支持生成a.out執(zhí)行格式的二進(jìn)制程序 。但完全轉(zhuǎn)向gcc 2.8版本是必然趨勢(shì),在當(dāng)前正在開發(fā)的FreeBSD 4.0-current中,已經(jīng)使用了gcc 2.8作為標(biāo)準(zhǔn)配置 。
在3.1系統(tǒng)中,如果想使用gcc 2.8,就需要安裝Packages Collection中提供的gcc-2.8軟件包(或者使用Ports Collection對(duì)源代碼進(jìn)行編譯) 。事實(shí)上還有另外兩個(gè)更強(qiáng)大的根據(jù)gcc進(jìn)一步開發(fā)的編譯器,pgcc支持Pentium代碼(標(biāo)準(zhǔn)的gcc只支持生成486代碼),egcc除了支持Pentium代碼之外,還提供了更大的優(yōu)化能力 。這些版本是商業(yè)公司依據(jù)gcc進(jìn)行的開發(fā),但根據(jù)GPL許可,任意使用者都可以根據(jù)需要選擇使用,使用這些編譯器版本能進(jìn)一步發(fā)揮系統(tǒng)的能力 。

推薦閱讀