gnuftp
『壹』 Binutils是什麼
目前(2009.9)最新版本為:Binutils (2.19):
ftp://ftp.gnu.org/gnu/binutils/Binutils的內容
Binutils 是一組開發工具,包括連接器,匯編器和其他用於目標文件和檔案的工具。安裝下列程序: addr2line, ar, as, c++filt, gprof, ld, nm, obj, objmp, ranlib, readelf, size, strings 和 strip安裝下列庫文件: libiberty.a, libbfd.[a,so] 和 libopcodes.[a,so] 簡短說明
addr2line 把程序地址轉換為文件名和行號。在命令行中給它一個地址和一個可執行文件名,它就會使用這個可執行文件的調試信息指出在給出的地址上是哪個文件以及行號。ar 建立、修改、提取歸檔文件。歸檔文件是包含多個文件內容的一個大文件,其結構保證了可以恢復原始文件內容。as 主要用來編譯GNU C編譯器gcc輸出的匯編文件,產生的目標文件由連接器ld連接。c++filt 連接器使用它來過濾 C++ 和 Java 符號,防止重載函數沖突。gprof 顯示程序調用段的各種數據。ld 是連接器,它把一些目標和歸檔文件結合在一起,重定位數據,並鏈接符號引用。通常,建立一個新編譯程序的最後一步就是調用ld。nm 列出目標文件中的符號。obj把一種目標文件中的內容復制到另一種類型的目標文件中.objmp 顯示一個或者更多目標文件的信息。顯示一個或者更多目標文件的信息。使用選項來控制其顯示的信息。它所顯示的信息通常只有編寫編譯工具的人才感興趣。ranlib 產生歸檔文件索引,並將其保存到這個歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標文件。readelf 顯示ebf格式可執行文件的信息。size 列出目標文件每一段的大小以及總體的大小。默認情況下,對於每個目標文件或者一個歸檔文件中的每個模塊只產生一行輸出。strings 列印某個文件的可列印字元串,這些字元串最少4個字元長,也可以使用選項-n設置字元串的最小長度。默認情況下,它只列印目標文件初始化和可載入段中的可列印字元;對於其它類型的文件它列印整個文件的可列印字元,這個程序對於了解非文本文件的內容很有幫助。
『貳』 linux下安裝make一步步搞定linux下安裝make
Linux是一種開放源的操作系統,在Linux下安裝make可以讓你構建項目更加方便,下面介紹如何安裝make在Linux中。
第一步: 檢查make是否安裝
在Linux下,要檢查make是否已安裝,可以使用以下命令:
`which make`
如果顯示有make命令,則證明make已安裝。
第二步:下載make
如果make沒有安裝,可以根據自己Linux系統找到合適的make工具,並在終端輸入以下命令下載:
`wget http://ftp.gnu.org/gnu/make/make-3.82.tar.gz`
第三步:解壓make
解壓下載的包:
`tar -zxvf make-3.82.tar.gz`
解壓好的目錄結構為『make-3.82』,cd進入該目錄。
第四步:安裝make
1.編譯 make
`./configure`
2.檢查安裝結果
`make check`
3.安裝 make
`make install`
第五步:檢查make安裝結果
安裝完成後,可以檢查安裝是否成功,輸入以下命令:
`make –v`
如果顯示出make的版本信息,則證明make安裝成功。
到這里,就可以使用make進行項目構建了。安裝make在Linux下十分方便,而且make也支持在Windows,Mac,Unix等各種操作系統上,它可以彌補各種平台間編譯工具的不足,讓軟體程序更輕松,更快速的構建。
『叄』 透過源碼領悟GCC到底在幹些什麼 GCC源碼分析
上半年一直在做有關GCC和LD的項目,到現在還沒做完。最近幾天編程的那台電腦壞了,所以趁此間隙寫一點相關的分析和經驗之類的跟大家共享。
一、GCC的作用和運行機制
GCC是Linux下重要的編譯工具,用法這里就不說了,滿大街都找得到。這里我重點介紹GCC的運作機制,作為代碼分析的鋪墊。全篇使用C語言子部件來作分析,因為我對其他語言的編譯沒有研究。
根據編譯原理,語言的編譯分為這么幾個步驟:詞法分析、語法分析、語義分析、中間語言生成、優化、目標代碼生成等。然而從編譯器使用的角度來看,要把源代碼翻譯為可執行文件要經過編譯和連接兩步,與此對應,一塌帆個完整的編譯系統一定包含編譯器和連接器兩大功能部件。編譯器要完成編譯原悶塵理中提到的那些任務;連接器要把編譯器生成的代碼片段拼接成一個完整的可執行程序。之所以需要連接器,是因為一般的程序都是多源文件的,而編譯器一次只編譯一個源文件(稱之為翻譯單元translation unit),因此需要連接器把所有翻譯單元對應的輸出合並成一個可執行文件。
如果一切順利,可執行程序就可以正確的生成出來。但是一旦源代碼存在某些問題,錯誤就會被報告出來。編譯器報告的錯誤一般都是局部錯誤,它會指明錯誤在哪個文件第幾行;連接器報告的錯誤一般都是全局錯誤,而且絕大多數都是多胳膊少腿的問題,比如函數重定義,無法解決的外部符號等,這些錯誤無法定位到某一行。
GCC就是這里的編譯器。准確來說,GCC是一個編譯驅動器,驅動cc1、as和ld三個部件完成編譯、匯編和連接的工作。cc1將C語言源文件編譯為匯編文件(.s)。而將匯編代碼轉換為二進制指令的工作由AS完成,生成大家都很熟悉的對象文件(.o);生成的這些對象文件再由AR程序打包成靜態庫(.a),或者由LD程序連接成可執行程序(elf、.so或其他格式)。而LD就是所謂的連接器。AS、AR、LD是屬於另外一個叫做binutils的軟體包的程序,所以要讓GCC能夠有效運作起來,除了在系統中安裝GCC外,還要安裝binutils才行。
以下是cc1、as、ld各司其責的配合完成一個編譯過程。
[plain] view plain
gcc test.c -S -o test.S
as test.S -o test.o
ld test.o -o test
通常所用的「gcc -c」就相當於「gcc -S」 + as,而對於編譯單個源文件一步到位生成可執行「gcc test.c -o test」相當於上面三個步驟的組合,中間文件被放置在臨時目錄下。從這一點看來,GCC除去編譯的功能外,更像是個driver,它可以驅動as和ld完成整個的編譯,特別是gcc也接受對象文件(.o)和靜態庫(.a)作為參數用於生成可執行程序,其實背後就是調用的LD,還可以用「-Wl,」選項給LD傳遞自定義參數。所以在大多數軟體的Makefile里,你很難找到AS和LD的字眼,gcc已經給你包辦了。
GCC源代碼里包含的主要就是cc1這部分(還包括一些其他的輔助工具,比如collect2等)。
二、GCC的安裝
要學習和修改GCC源碼,首先第一步是在自己的機器上用GCC源代碼編譯出一個選定版本的GCC(這里以gcc-4.5.2.tar.bz2為例,源碼可以從http://gcc.gnu.org去下載)。除此之外,GCC依賴於gmp、mpfr、mpc三個庫,如果你機器上沒有,或者版本太團罩雹老以至於無法支持新的GCC,那麼你還得去把這三個庫下載下來。
一般來說,下載GCC是從GNU的FTP鏡像網站去下載,gcc的代碼包一般放置在/release/gcc-x.y目錄下,而那三個依賴庫一般放置在/infrastructure/目錄下。
1、把依賴庫和GCC解包
[plain] view plain
tar -vjxf gmp-4.3.2.tar.bz2 -C /usr/src/
tar -vjxf mpfr-2.4.2.tar.bz2 -C /usr/src/
tar -vxf mpc-0.8.1.tar.gz -C /usr/src/
tar -vjxf gcc-4.5.2.tar.bz2 -C /usr/src/
2、到自己的home目錄下編譯依賴庫
[plain] view plain
cd ~
mkdir gmp-build
cd gmp-build
/usr/src/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2 #指定安裝位置
make
make check
make install
cd ~
mkdir mpfr-build
cd mpfr-build
/usr/src/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
make
make check
make install
cd ~
mkdir mpc-build
cd mpfr-build
/usr/src/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
make
make check
make install
3、編譯GCC
[plain] view plain
cd ~
mkdir gcc-build
cd gcc-build
/usr/src/gcc-4.5.2/configure --prefix=/usr/local/gcc-4.5.2 --with-mpc=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2 --enable-languages=c,c++
make
make install
『肆』 怎樣重新編譯php呢
要重新編譯PHP並集成libiconv函數庫,首先需下載libiconv源碼。
下載地址:http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.2.tar.gz
解壓下載的tar包:
tar -zxvf libiconv-1.9.2.tar.gz
接下來,安裝libiconv:
配置安裝目錄:# configure --prefix=/usr/local/iconv
編譯:# make
安裝:# make install
完成libiconv的安裝後,進行PHP的重新編譯。在編譯PHP時,需要指定--with-iconv=/usr/local/iconv參數。
對於Windows環境下的操作,如在Windows 2000下使用PHP,可以通過修改php.ini文件來啟用libiconv。具體操作是去除extension=php_iconv.dll前的分號,並將原php安裝文件夾下的iconv.dll復制到winnt/system32目錄下。
在Linux環境下,如果使用靜態安裝方式,可以通過在configure命令中添加--with-iconv=/usr/local/libiconv參數來啟用libiconv。使用phpinfo查看是否已啟用。
下載libiconv源碼:ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.8.tar.gz
解壓、配置、編譯、安裝步驟與之前相同。
重新編譯PHP後,如果在使用iconv函數時遇到bug,例如在轉換字元「—」到GB2312編碼時出現問題,可以通過在iconv函數的第二個參數後添加「//IGNORE」來解決。此參數表示忽略轉換時的錯誤,避免所有該字元後面的字元串無法被保存。
在需要轉換編碼的場景中,可以使用iconv函數實現不同字元集間的轉換。需要注意的是,iconv並非PHP的默認函數,需要單獨安裝。在某些環境下,如Windows 2000+php,可以通過修改php.ini文件來啟用。在Linux環境下,通常使用靜態安裝方式即可。
PHP中另一個與iconv功能相似的函數是mbstring擴展庫中的函數,用於實現字元串編碼的轉換。