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

  免費注冊 查看新帖 |

Chinaunix

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

Glibc Binutils GCC 安裝指南 [復(fù)制鏈接]

論壇徽章:
1
摩羯座
日期:2013-10-23 12:41:02
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-01-14 19:39 |只看該作者 |倒序瀏覽
Glibc Binutils GCC 安裝指南
http://lamp.linux.gov.cn/Linux/Glibc-GCC-Binutils-Install.html
作者:金步國
版權(quán)聲明
本文作者是一位自由軟件愛好者,所以本文雖然不是軟件,但是本著 GPL 的精神發(fā)布。任何人都可以自由使用、轉(zhuǎn)載、復(fù)制和再分發(fā),但必須保留作者署名,亦不得對聲明中的任何條款作任何形式的修改,也不得附加任何其它條件。您可以自由鏈接、下載、傳播此文檔,但前提是必須保證全文完整轉(zhuǎn)載,包括完整的版權(quán)信息和作譯者聲明。
其他作品
本文作者十分愿意與他人共享勞動成果,如果你對我的其他翻譯作品或者技術(shù)文章有興趣,可以在如下位置查看現(xiàn)有作品的列表:
    * 金步國作品列表
BUG報告,切磋與探討
由于作者水平有限,因此不能保證作品內(nèi)容準(zhǔn)確無誤,請在閱讀中自行鑒別。如果你發(fā)現(xiàn)了作品中的錯誤,請您來信指出,哪怕是錯別字也好,任何提高作品質(zhì)量的建議我都將虛心接納。如果你愿意就作品中的相關(guān)內(nèi)容與我進行進一步切磋與探討,也歡迎你與我聯(lián)系。聯(lián)系方式:MSN: csfrank122@hotmail.com
Glibc 安裝指南(適用于2.6.1 → 2.9)
安裝信息的來源
    * 源碼包內(nèi)的下列文件:configure   FAQ   INSTALL   NOTES   Makeconfig   README   localedata/README
    * http://www.gnu.org/software/libc/manual/html_node/System-Configuration.html
    * http://www.gnu.org/software/libc/manual/html_node/Installation.html
    * http://www.gnu.org/software/libc/manual/html_node/Name-Service-Switch.html
要點提示
編譯Glibc的時候應(yīng)該盡可能使用最新的內(nèi)核頭文件,至少要使用 2.6.16 以上版本的內(nèi)核,先前的版本有一些缺陷會導(dǎo)致"make check"時一些與pthreads測試相關(guān)的項目失敗。使用高版本內(nèi)核頭文件編譯的Glibc二進制文件完全可以運行在較低版本的內(nèi)核上,并且當(dāng)你升級內(nèi)核后新內(nèi)核的特性仍然可以得到充分發(fā)揮而無需重新編譯Glibc。但是如果編譯時使用的頭文件的版本較低,那么運行在更高版本的內(nèi)核上時,新內(nèi)核的特性就不能得到充分發(fā)揮。更多細節(jié)可以查看[八卦故事]內(nèi)核頭文件傳奇的跟帖部分。
推薦使用GCC-4.1以上的版本編譯,老版本的GCC可能會生成有缺陷的代碼。
不要在運行中的系統(tǒng)上安裝 Glibc,否則將會導(dǎo)致系統(tǒng)崩潰,至少應(yīng)當(dāng)將新 Glibc 安裝到其他的單獨目錄,以保證不覆蓋當(dāng)前正在使用的 Glibc 。
Glibc 不能在源碼目錄中編譯,它必須在一個額外分開的目錄中編譯。這樣在編譯發(fā)生錯誤的時候,就可以刪除整個編譯目錄重新開始。
源碼樹下的Makeconfig文件中有許多用于特定目的的變量,你可以在編譯目錄下創(chuàng)建一個configparms文件來改寫這些變量。執(zhí)行 make命令的時候configparms文件中的內(nèi)容將會按照Makefile規(guī)則進行解析。比如可以通過在其中設(shè)置 CFLAGS LDFLAGS 環(huán)境變量來優(yōu)化編譯,設(shè)置 CC BUILD_CC AR RANLIB 來指定交叉編譯環(huán)境。
需要注意的是有些測試項目假定是以非 root 身份執(zhí)行的,因此我們強烈建議你使用非 root 身份編譯和測試 Glibc 。
從2.8版本開始,Glibc的開發(fā)者不再提供tarball,而只提供snapshot,下載地址在這里:ftp://sourceware.org/pub/glibc/snapshots/
配置選項
下列選項皆為非默認值[特別說明的除外]
--help
--version
--quiet
--config-cache
--no-create
--srcdir=DIR
--exec-prefix=EPREFIX
--bindir=DIR
--sbindir=DIR
--libexecdir=DIR
--sysconfdir=DIR
--sharedstatedir=DIR
--localstatedir=DIR
--libdir=DIR
--includedir=DIR
--oldincludedir=DIR
--datarootdir=DIR
--datadir=DIR
--infodir=DIR
--localedir=DIR
--mandir=DIR
--docdir=DIR
--htmldir=DIR
--dvidir=DIR
--pdfdir=DIR
--psdir=DIR
--build=BUILD
--host=HOST
    這些選項的含義基本上通用于所有軟件包,這里就不特別講解了。需要注意的是:沒有--target=TARGET選項。
--prefix=PREFIX
    安裝目錄,默認為 /usr/local
    Linux文件系統(tǒng)標(biāo)準(zhǔn)要求基本庫必須位于 /lib 目錄并且必須與根目錄在同一個分區(qū)上,但是 /usr 可以在其他分區(qū)甚至是其他磁盤上。因此,如果在Linux平臺上指定 --prefix=/usr ,那么基本庫部分將自動安裝到 /lib 目錄下,而非基本庫部分則會自動安裝到 /usr/lib 目錄中,同時將使用 /etc 作為配置目錄,也就是等價于"slibdir=/lib sysconfdir=/etc"。但是如果保持默認值或指定其他目錄,那么所有組件都間被安裝到PREFIX目錄下。
--disable-sanity-checks
    真正禁用線程(僅在特殊環(huán)境下使用該選項)。
--enable-check-abi
    在"make check"時執(zhí)行"make check-abi"。[提示]在我的機器上始終導(dǎo)致check-abi-libm測試失敗。
--disable-shared
    不編譯共享庫(即使平臺支持)。在支持 ELF 并且使用 GNU 連接器的系統(tǒng)上默認為enable 。[提示] --disable-static 選項實際上是不存在的,靜態(tài)庫總是被無條件的編譯和安裝。
--enable-profile
    啟用 profiling 信息相關(guān)的庫文件編譯。主要用于調(diào)試目的。
--enable-omitfp
    編譯時忽略幀指示器(使用 -fomit-frame-pointer 編譯),并采取一些其他優(yōu)化措施。忽略幀指示器可以提高運行效率,但是調(diào)試將變得不可用,并且可能生成含有 bug 的代碼。使用這個選項還將導(dǎo)致額外編譯帶有調(diào)試信息的非優(yōu)化版本的靜態(tài)庫(庫名稱以"_g"結(jié)尾)。
--enable-bounded
    啟用運行時邊界檢查(比如數(shù)組越界),這樣會降低運行效率,但能防止某些溢出漏洞。
--disable-versioning
    不在共享庫對象中包含符號的版本信息。這樣可以減小庫的體積,但是將不兼容依賴于老版本 C 庫的二進制程序。[提示]在我的機器上使用此選項總是導(dǎo)致編譯失敗。
--enable-oldest-abi=ABI
    啟用老版本的應(yīng)用程序二進制接口支持。ABI是Glibc的版本號,只有明確指定版本號時此選項才有效。
--enable-stackguard-randomization
    在程序啟動時使用一個隨機數(shù)初始化 __stack_chk_guard ,主要用來抵抗惡意攻擊。
--enable-add-ons[=DIRS...]
    為了減小軟件包的復(fù)雜性,一些可選的libc特性被以單獨的軟件包發(fā)布,比如'linuxthreads'(現(xiàn)在已經(jīng)被廢棄了),他們被稱為'add-ons'。要使用這些額外的包,可以將他們解壓到Glibc的源碼樹根目錄下,然后使用此選項將DIR1,DIR2,...中的附加軟件包包含進來。其中的"DIR"是附加軟件包的目錄名。默認值"yes"表示編譯所有源碼樹根目錄下找到的附加軟件包。
--disable-hidden-plt
    默認情況下隱藏僅供內(nèi)部調(diào)用的函數(shù),以避免這些函數(shù)被加入到過程鏈接表(PLT,Procedure Linkage Table)中,這樣可以減小 PLT 的體積并將僅供內(nèi)部使用的函數(shù)隱藏起來。而使用該選項將把這些函數(shù)暴露給外部用戶。
--enable-bind-now
    禁用"lazy binding",也就是動態(tài)連接器在載入 DSO 時就解析所有符號(不管應(yīng)用程序是否用得到),默認行為是"lazy binding",也就是僅在應(yīng)用程序首次使用到的時候才對符號進行解析。因為在大多數(shù)情況下,應(yīng)用程序并不需要使用動態(tài)庫中的所有符號,所以默認的 "lazy binding"可以提高應(yīng)用程序的加載性能并節(jié)約內(nèi)存用量。然而,在兩種情況下,"lazy binding"是不利的:①因為第一次調(diào)用DSO中的函數(shù)時,動態(tài)連接器要先攔截該調(diào)用來解析符號,所以初次引用DSO中的函數(shù)所花的時間比再次調(diào)用要花的時間長,但是某些應(yīng)用程序不能容忍這種不可預(yù)知性。②如果一個錯誤發(fā)生并且動態(tài)連接器不能解析該符號,動態(tài)連接器將終止整個程序。在"lazy binding"方式下,這種情況可能發(fā)生在程序運行過程中的某個時候。某些應(yīng)用程序也是不能容忍這種不可預(yù)知性的。通過關(guān)掉"lazy binding"方式,在應(yīng)用程序接受控制權(quán)之前,讓動態(tài)連接器在處理進程初始化期間就發(fā)現(xiàn)這些錯誤,而不要到運行時才出亂子。
--enable-static-nss
    編譯靜態(tài)版本的NSS(Name Service Switch)庫。僅在/etc/nsswitch.conf中只使用dns和files的情況下,NSS才能編譯成靜態(tài)庫,并且你還需要在靜態(tài)編譯應(yīng)用程序的時候明確的連接所有與NSS庫相關(guān)的庫才行[比如:gcc -static test.c -o test -Wl,-lc,-lnss_files,-lnss_dns,-lresolv]。不推薦使用此選項,因為連接到靜態(tài)NSS庫的程序不能動態(tài)配置以使用不同的名字?jǐn)?shù)據(jù)庫。
--disable-force-install
    不強制安裝當(dāng)前新編譯的版本(即使已存在的文件版本更新)。
--enable-kernel=VERSION
    VERSION 的格式是 X.Y.Z,表示編譯出來的 Glibc 支持的最低內(nèi)核版本。VERSION 的值越高(不能超過內(nèi)核頭文件的版本),加入的兼容性代碼就越少,庫的運行速度就越快。
--enable-all-warnings
    在編譯時顯示所有編譯器警告,也就是使用 -Wall 選項編譯。
--with-gd
--with-gd-include
--with-gd-lib
    指定libgd的安裝目錄(DIR/include和DIR/lib)。后兩個選項分別指定包含文件和庫目錄。
--without-fp
    僅在硬件沒有浮點運算單元并且操作系統(tǒng)沒有模擬的情況下使用。x86 與 x86_64 的 CPU 都有專門的浮點運算單元。而且 Linux 有 FPU 模擬。簡單的說,不要 without 這個選項!因為它會導(dǎo)致許多問題!
--with-binutils=DIR
    明確指定編譯時使用的Binutils(as,ld)所在目錄。
--with-elf
    指定使用 ELF 對象格式,默認不使用。建議在支持 ELF 的 Linux 平臺上明確指定此選項。
--with-selinux
--without-selinux
    啟用/禁用 SELinux 支持,默認值自動檢測。
--with-xcoff
    使用XCOFF對象格式(主要用于windows)。
--without-cvs
    不訪問CVS服務(wù)器。推薦使用該選項,特別對于從CVS下載的的版本。
--with-headers=DIR
    指定內(nèi)核頭文件的所在目錄,在Linux平臺上默認是'/usr/include'。
--without-tls
    禁止編譯支持線程本地存儲(TLS)的庫。使用這個選項將導(dǎo)致兼容性問題。
--without-__thread
    即使平臺支持也不使用TSL特性。建議不要使用該選項。
--with-cpu=CPU
    在 gcc 命令行中加入"-mcpu=CPU"。鑒于"-mcpu"已經(jīng)被反對使用,所以建議不要設(shè)置該選項,或者設(shè)為 --without-cpu 。
編譯與測試
使用 make 命令編譯,使用 make check 測試。如果 make check 沒有完全成功,就千萬不要使用這個編譯結(jié)果。需要注意的是有些測試項目假定是以非 root 身份執(zhí)行的,因此我們強烈建議你使用非 root 身份編譯和測試。
測試中需要使用一些已經(jīng)存在的文件(包括隨后的安裝過程),比如 /etc/passwd, /etc/nsswitch.conf 之類。請確保這些文件中包含正確的內(nèi)容。
安裝與配置
使用 make install 命令安裝。比如:make install LC_ALL=C
如果你打算將此 Glibc 安裝為主 C 庫,那么我們強烈建議你關(guān)閉系統(tǒng),重新引導(dǎo)到單用戶模式下安裝。這樣可以將可能的損害減小到最低。
安裝后需要配置 GCC 以使其使用新安裝的 C 庫。最簡單的辦法是使用恰當(dāng) GCC 的編譯選項(比如 -Wl,--dynamic-linker=/lib/ld-linux.so.2 )重新編譯 GCC 。然后還需要修改 specs 文件(通常位于 /usr/lib/gcc-lib/TARGET/VERSION/specs ),這個工作有點像巫術(shù),調(diào)整實例請參考 LFS 中的兩次工具鏈調(diào)整。
可以在 make install 命令行使用'install_root'變量指定安裝實際的安裝目錄(不同于 --prefix 指定的值)。這個在 chroot 環(huán)境下或者制作二進制包的時候通常很有用。'install_root'必須使用絕對路徑。
被'grantpt'函數(shù)調(diào)用的輔助程序'/usr/libexec/pt_chown'以 setuid 'root' 安裝。這個可能成為安全隱患。如果你的 Linux 內(nèi)核支持'devptsfs'或'devfs'文件系統(tǒng)提供的 pty slave ,那么就不需要使用 pt_chown 程序。
安裝完畢之后你還需要配置時區(qū)和 locale 。使用 localedef 來配置locale 。比如使用'localedef -i de_DE -f ISO-8859-1 de_DE'將 locale 設(shè)置為'de_DE.ISO-8859-1'。可以在編譯目錄中使用'make localedata/install-locales'命令配置所有可用的 locale ,但是一般不需要這么做。
時區(qū)使用'TZ'環(huán)境變量設(shè)置。tzselect 腳本可以幫助你選擇正確的值。設(shè)置系統(tǒng)全局范圍內(nèi)的時區(qū)可以將 /etc/localtime 文件連接到 /usr/share/zoneinfo 目錄下的正確文件上。比如對于中國人可以'ln -s /usr/share/zoneinfo/PRC /etc/localtime'。
Binutils 安裝指南(適用于2.18 → 2.19)
安裝信息的來源
    * 源碼包內(nèi)的下列文件:各級目錄下的configure腳本   README   {bfd,binutils,gas,gold,libiberty}/README
要點提示
如果想與GCC聯(lián)合編譯,那么可以將binutils包的內(nèi)容解壓到GCC的源碼目錄中(tar -xvf binutils-2.19.tar.bz2 --strip-components=1 -C gcc-4.3.3),然后按照正常編譯GCC的方法編譯即可。這樣做的好處之一是可以完整的將 GCC 與 Binutils 進行一次bootstrap。
推薦用一個新建的目錄來編譯,而不是在源碼目錄中。編譯完畢后可以使用"make check"運行測試套件。這個測試套件依賴于DejaGnu軟件包,而DejaGnu又依賴于expect,expect依賴于tcl。
如果只想編譯 ld 可以使用"make all-ld",如果只想編譯 as 可以使用"make all-gas"。類似的還有 clean-ld clean-as distclean-ld distclean-as check-ld check-as 等。
配置選項
下列選項皆為非默認值[特別說明的除外]
--help
--version
--quiet
--config-cache
--no-create
--srcdir=DIR
--prefix=PREFIX
--exec-prefix=EPREFIX
--bindir=DIR
--sbindir=DIR
--libexecdir=DIR
--datadir=DIR
--sysconfdir=DIR
--sharedstatedir=DIR
--localstatedir=DIR
--libdir=DIR
--includedir=DIR
--oldincludedir=DIR
--infodir=DIR
--mandir=DIR
--program-prefix=PREFIX
--program-suffix=SUFFIX
--program-transform-name=PROGRAM
--build=BUILD
--host=HOST
--target=TARGET
    這些選項的含義基本上通用于所有軟件包,這里就不特別講解了。
--disable-nls
    禁用本地語言支持(它允許按照非英語的本地語言顯示警告和錯誤消息)。編譯時出現(xiàn)"undefined reference to 'libintl_gettext'"錯誤則必須禁用。
--disable-rpath
    不在二進制文件中硬編碼庫文件的路徑。
--disable-multilib
    禁止編譯適用于多重目標(biāo)體系的庫。例如,在x86_64平臺上,默認既可以生成64位代碼,也可以生成32位代碼,若使用此選項,那么將只能生成64位代碼。
--enable-cgen-maint=CGENDIR
    編譯cgen相關(guān)的文件[主要用于GDB調(diào)試]。
--enable-shared[=PKG[,...]]
--disable-shared
--enable-static[=PKG[,...]]
--disable-static
    允許/禁止編譯共享或靜態(tài)版本的庫和可執(zhí)行程序,全部可識別的PKG如下:binutils,gas,gprof,ld,bfd,opcodes,libiberty(僅支持作為靜態(tài)庫)。static在所有目錄下的默認值都是"yes";而shared在不同子目錄下默認值不同,有些為"yes"(binutils,gas,gprof,ld)有些為"no" (bfd,opcodes,libiberty)。
--enable-install-libbfd
--disable-install-libbfd
    允許或禁止安裝 libbfd 以及相關(guān)的頭文件( libbfd 是二進制文件描述庫,用于讀寫目標(biāo)文件".o",被GDB/ld/as等程序使用)。本地編譯或指定--enable-shared的情況下默認值為"yes",否則默認值為"no"。
--enable-64-bit-bfd
    讓BFD支持64位目標(biāo),如果希望在32位平臺上編譯64程序就需要使用這個選項。如果指定的目標(biāo)(TARGET)是64位則此選項默認打開,否則默認關(guān)閉(即使 --enable-targets=all 也是如此)。
--enable-elf-stt-common
    允許BFD生成STT_COMMON類型的ELF符號。[2.19版本新增選項]
--enable-checking
--disable-checking
    允許 as 執(zhí)行運行時檢查。正式發(fā)布版本默認禁用,快照版本默認啟用。
--disable-werror
    禁止將所有編譯器警告當(dāng)作錯誤看待(因為當(dāng)編譯器為GCC時默認使用-Werror)。
--enable-got=target|single|negative|multigot
    指定GOT的處理模式。默認值是"target"。[2.19版本新增選項]
--enable-gold
    使用gold代替GNU ld。gold是Google開發(fā)的連接器,2008年捐贈給FSF,目的是取代現(xiàn)有的GNU ld,但目前兩者還不能完兼容。[2.19版本新增選項]
--enable-plugins
    啟用gold連接器的插件支持。[2.19版本新增選項]
--enable-threads
    編譯多線程版本的gold連接器。[2.19版本新增選項]
--with-lib-path=dir1:dir2...
    指定編譯出來的binutils工具(比如:ld)將來默認的庫搜索路徑,在絕大多數(shù)時候其默認值是"/lib:/usr/lib"。這個工作也可以通過設(shè)置 Makefile 中的 LIB_PATH 變量值完成。
--with-libiconv-prefix[=DIR]
--without-libiconv-prefix
    在 DIR/include 目錄中搜索 libiconv 頭文件,在 DIR/lib 目錄中搜索 libiconv 庫文件。或者根本不使用 libiconv 庫。
--with-libintl-prefix[=DIR]
--without-libintl-prefix
    在 DIR/include 目錄中搜索 libintl 頭文件,在 DIR/lib 目錄中搜索 libintl 庫文件;蛘吒静皇褂 libintl 庫。
--with-mmap
    使用mmap訪問BFD輸入文件。某些平臺上速度較快,某些平臺上速度較慢,某些平臺上無法正常工作。
--with-pic
--without-pic
    試圖僅使用 PIC 或 non-PIC 對象,默認兩者都使用。
以下選項僅在與GCC聯(lián)合編譯時才有意義,其含義與GCC相應(yīng)選項的含義完全一樣,默認值也相同。
--enable-bootstrap
--disable-bootstrap
--enable-languages=lang1,lang2,...
--enable-stage1-checking
--enable-stage1-languages
--disable-libada
--disable-libgcj
--disable-libgomp
--disable-libmudflap
--disable-libssp
--enable-objc-gc
--disable-cloog-version-check
--disable-ppl-version-check
--with-gnu-as
--with-gnu-ld
--with-gmp=GMPDIR
--with-gmp-include=GMPINCDIR
--with-gmp-lib=GMPLIBDIR
--with-mpfr=MPFRDIR
--with-mpfr-include=MPFRINCDIR
--with-mpfr-lib=MPFRLIBDIR
--with-cloog=CLOOGDIR
--with-cloog_include=CLOOGINCDIR
--with-cloog_lib=CLOOGLIBDIR
--with-ppl=PPLDIR
--with-ppl_include=PPLINCDIR
--with-ppl_lib=PPLLIBDIR
--with-stabs
以下選項僅用于交叉編譯環(huán)境
--enable-serial-[{host,target,build}-]configure
    強制為 host, target, build 順序配置子包,如果使用"all"則表示所有子包。
--with-sysroot=dir
    將 dir 看作目標(biāo)系統(tǒng)的根目錄。目標(biāo)系統(tǒng)的頭文件、庫文件、運行時對象都將被限定在其中。
--with-target-subdir=SUBDIR
    為 target 在 SUBDIR 子目錄中進行配置。
--with-newlib
    將'newlib'(另一種標(biāo)準(zhǔn)C庫,主要用于嵌入式環(huán)境)指定為目標(biāo)系統(tǒng)的C庫進行使用。
--with-build-sysroot=sysroot
    在編譯時將'sysroot'當(dāng)作指定 build 平臺的根目錄看待。僅在已經(jīng)使用了--with-sysroot選項的時候,該選項才有意義。
--with-build-subdir=SUBDIR
    為 build 在 SUBDIR 子目錄中進行配置。
--with-build-libsubdir=DIR
    指定 build 平臺的庫文件目錄。默認值是SUBDIR。
--with-build-time-tools=path
    在給定的path中尋找用于編譯Binutils自身的目標(biāo)工具。該目錄中必須包含 ar, as, ld, nm, ranlib, strip 程序,有時還需要包含 objdump 程序。例如,當(dāng)編譯Binutils的系統(tǒng)的文件布局和將來部署B(yǎng)inutils的目標(biāo)系統(tǒng)不一致時就需要使用此選項。
--with-cross-host=HOST
    這個選項已經(jīng)被反對使用,應(yīng)該使用--with-sysroot來代替其功能。
以下選項意義不大,一般不用考慮它們
--disable-dependency-tracking
    禁止對Makefile規(guī)則的依賴性追蹤。
--disable-largefile
    禁止支持大文件。[2.19版本新增選項]
--disable-libtool-lock
    禁止 libtool 鎖定以加快編譯速度(可能會導(dǎo)致并行編譯的失敗)
--disable-build-warnings
    禁止顯示編譯時的編譯器警告,也就是使用"-w"編譯器選項進行編譯。
--disable-fast-install
    禁止為快速安裝而進行優(yōu)化。
--enable-maintainer-mode
    啟用無用的 make 規(guī)則和依賴性(它們有時會導(dǎo)致混淆)
--enable-commonbfdlib
--disable-commonbfdlib
    允許或禁止編譯共享版本的 BFD/opcodes/libiberty 庫。分析configure腳本后發(fā)現(xiàn)這個選項事實上沒有任何實際效果。
--enable-install-libiberty
    安裝 libiberty 的頭文件(libiberty.h),許多程序都會用到這個庫中的函數(shù)(getopt,strerror,strtol,strtoul)。這個選項經(jīng)過實驗,沒有實際效果(相當(dāng)于disable)。
--enable-secureplt
    使得binutils默認創(chuàng)建只讀的 plt 項。相當(dāng)于將來調(diào)用 gcc 時默認使用 -msecure-plt 選項。僅對 powerpc-linux 平臺有意義。
--enable-targets=TARGET,TARGET,TARGET...
    使BFD在默認格式之外再支持多種其它平臺的二進制文件格式,"all"表示所有已知平臺。在32位系統(tǒng)上,即使使用"all"也只能支持所有32位目標(biāo),除非同時使用 --enable-64-bit-bfd 選項。由于目前 gas 并不能使用內(nèi)置的默認平臺之外的其它目標(biāo),因此這個選項沒什么實際意義。此選項在所有目錄下都沒有默認值。但對于2.19版本,此選項在gold子目錄下的默認值是"all"。
--with-bugurl=URL
--without-bugurl
    指定發(fā)送bug報告的URL/禁止發(fā)送bug報告。默認值是"http://www.sourceware.org/bugzilla/"。
--with-datarootdir=DATADIR
    將 DATADIR 用作數(shù)據(jù)根目錄,默認值是[PREFIX/share]
--with-docdir=DOCDIR
--with-htmldir=HTMLDIR
--with-pdfdir=PDFDIR
    指定各種文檔的安裝目錄。DOCDIR默認值的默認值是DATADIR,HTMLDIR和PDFDIR的默認值是DOCDIR。
--with-included-gettext
    使用軟件包中自帶的 GNU gettext 庫。如果你已經(jīng)使用了Glibc-2.0以上的版本,或者系統(tǒng)中已經(jīng)安裝了GNU gettext軟件包,那么就沒有必要使用這個選項。默認不使用。
--with-pkgversion=PKG
    在 bfd 庫中使用"PKG"代替默認的"GNU Binutils"作為版本字符串。比如你可以在其中嵌入編譯時間或第多少次編譯之類的信息。
--with-separate-debug-dir=DIR
    在DIR中查找額外的全局debug信息,默認值:${libdir}/debug
--with-debug-prefix-map='A=B C=D ...'
    在調(diào)試信息中建立 A-B,C-D, ... 這樣的映射關(guān)系。默認為空。[2.19版本新增選項]
環(huán)境變量
tooldir
    可執(zhí)行文件的安裝目錄。其默認值是"$(exec_prefix)/$(target_alias)"。
GCC 安裝指南(適用于4.3 → 4.4)
安裝信息的來源
    * 源碼包內(nèi)的下列文件:各級目錄下的configure腳本   ABOUT-NLS   gcc/testsuite/README*   INSTALL/*   libstdc++-v3/docs/html/manual/bk01pt01ch02.html
    * http://gcc.gnu.org/faq.html
    * http://gcc.gnu.org/install/
    * http://gcc.gnu.org/onlinedocs/libstdc++/faq.html
    * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch02.html
要點提示
從GCC-4.3起,安裝GCC將依賴于GMP-4.1以上版本和MPFR-2.3.2以上版本。如果將這兩個軟件包分別解壓到GCC源碼樹的根目錄下,并分別命名為"gmp"和"mpfr",那么GCC的編譯程序?qū)⒆詣訉烧吲cGCC一起編譯。建議盡可能使用最新的GMP和MPFR版本。
推薦用一個新建的目錄來編譯GCC,而不是在源碼目錄中,這一點玩過LFS的兄弟都很熟悉了。另外,如果先前在編譯中出現(xiàn)了錯誤,推薦使用 make distclean 命令進行清理,然后重新運行 configure 腳本進行配置,再在另外一個空目錄中進行編譯。
如果想要安裝C++編譯器,那么 libstdc++ 將要求系統(tǒng)的C庫必須至少帶有 de_DE locale 支持,如果使用了 --enable-clocale=gnu 配置選項(很可能就是默認值),那么還需要下列 locale :
locale              字符集
-------------------------------------
de_DE               ISO-8859-1
de_DE@euro          ISO-8859-15
en_HK               ISO-8859-1
en_PH               ISO-8859-1
en_US               ISO-8859-1
en_US.ISO-8859-1    ISO-8859-1
en_US.ISO-8859-15   ISO-8859-15
en_US.UTF-8         UTF-8
es_ES               ISO-8859-1
es_MX               ISO-8859-1
fr_FR               ISO-8859-1
fr_FR@euro          ISO-8859-15
is_IS               UTF-8
it_IT               ISO-8859-1
ja_JP.eucjp         EUC-JP
se_NO.UTF-8         UTF-8
ta_IN               UTF-8
zh_TW               BIG5
不過,這些locale并非嚴(yán)格必須,即使缺少上述 locale ,C++編譯器也不會失效,只是libstdc++就不能提供"named locale"特性了,并且測試程序也會跳過與此相關(guān)的測試。
配置選項
[注意]這里僅包含適用于 C/C++ 語言編譯器、十進制數(shù)字?jǐn)U展庫(libdecnumber)、在多處理機上編寫并行程序的應(yīng)用編程接口GOMP庫(libgomp)、大雜燴的 libiberty庫、執(zhí)行運行時邊界檢查的庫(libmudflap)、保護堆棧溢出的庫(libssp)、標(biāo)準(zhǔn)C++庫(libstdc++) 相關(guān)的選項。也就是相當(dāng)于 gcc-core 與 gcc-g++ 兩個子包的選項。并不包括僅僅適用于其他語言的選項。
每一個 --enable 選項都有一個對應(yīng)的 --disable 選項,同樣,每一個 --with 選項也都用一個對應(yīng)的 --without 選項。每一對選項中必有一個是默認值(依賴平臺的不同而不同)。下面所列選項若未特別說明皆為非默認值。
--help
--version
--quiet
--config-cache
--no-create
--srcdir=DIR
--prefix=PREFIX
--exec-prefix=EPREFIX
--bindir=DIR
--sbindir=DIR
--libexecdir=DIR
--datadir=DIR
--sysconfdir=DIR
--sharedstatedir=DIR
--localstatedir=DIR
--libdir=DIR
--includedir=DIR
--oldincludedir=DIR
--infodir=DIR
--mandir=DIR
--program-prefix=PREFIX
--program-suffix=SUFFIX
--program-transform-name=PROGRAM
--build=BUILD
--host=HOST
--target=TARGET
    這些選項的含義基本上通用于所有軟件包,這里就不特別講解了。
--disable-nls
    禁用本地語言支持(它允許按照非英語的本地語言顯示警告和錯誤消息)。編譯時出現(xiàn)"undefined reference to 'libintl_gettext'"錯誤則必須禁用。
--disable-rpath
    不在二進制文件中硬編碼庫文件的路徑。
--enable-bootstrap
--disable-bootstrap
    "bootstrap"的意思是用第一次編譯生成的程序來第二次編譯自己,然后又用第二次編譯生成的程序來第三次編譯自己,最后比較第二次和第三次編譯的結(jié)果,以確保編譯器能毫無差錯的編譯自身,這通常表明編譯是正確的。非交叉編譯的情況下enable是默認值;交叉編譯的情況下,disable是默認值。
--enable-checking[=LIST]
    該選項會在編譯器內(nèi)部生成一致性檢查的代碼,它并不改變編譯器生成的二進制結(jié)果。這樣導(dǎo)致編譯時間增加,并且僅在使用GCC作為編譯器的時候才有效,但是對輸出結(jié)果沒有影響。在"gcc"子目錄下,對從CVS下載的版本默認值是"yes"(=assert,misc,tree,gc,rtlflag,runtime),對于正式發(fā)布的版本則是"release" (=assert,runtime),在"libgcc"子目錄下,默認值始終是"no"?梢詮 "assert,df,fold,gc,gcac,misc,rtlflag,rtl,runtime,tree,valgrind"中選擇你想要檢查的項目(逗號隔開的列表,"all"表示全部),其中rtl,gcac,valgrind非常耗時。使用 --disable-checking 完全禁止這種檢查會增加未能檢測內(nèi)部錯誤的風(fēng)險,所以不建議這樣做。
--enable-languages=lang1,lang2,...
    只安裝指定語言的編譯器及其運行時庫,可以使用的語言是:ada, c, c++, fortran, java, objc, obj-c++ ,若不指定則安裝所有默認可用的語言(ada和obj-c++為非默認語言)。
--disable-multilib
    禁止編譯適用于多重目標(biāo)體系的庫。例如,在x86_64平臺上,編譯器默認既可以生成64位代碼,也可以生成32位代碼,若使用此選項,那么將只能生成64位代碼。
--enable-shared[=PKG[,...]]
--disable-shared
--enable-static[=PKG[,...]]
--disable-static
    允許/禁止編譯共享或靜態(tài)版本的庫,全部可識別的庫如下:libgcc,libstdc++,libffi,zlib,boehm- gc,ada,libada,libjava,libobjc,libiberty(僅支持作為靜態(tài)庫)。static在所有目錄下的默認值都是"yes";shared除了在libiberty目錄下的默認值是"no"外,在其它目錄下的默認值也都是"yes"。
--enable-decimal-float[=bid|dpd]
--disable-decimal-float
    啟用或禁用 libdecnumber 庫符合 IEEE 754-2008 標(biāo)準(zhǔn)的 C 語言十進制浮點擴展,還可以進一步選擇浮點格式(bid是i386與x86_64的默認值;dpd是PowerPC的默認值)。在 PowerPC/i386/x86_64 GNU/Linux 系統(tǒng)默認啟用,在其他系統(tǒng)上默認禁用。
--disable-libgomp
    不編譯在多處理機上編寫并行程序的應(yīng)用編程接口GOMP庫(libgomp)。
--disable-libmudflap
    不編譯執(zhí)行運行時邊界檢查的庫(libmudflap)。
--disable-libssp
    不編譯保護緩沖區(qū)溢出的運行時庫。
--disable-symvers
    禁用共享庫對象中符號包含的版本信息。使用這個選項將導(dǎo)致 ABI 發(fā)生改變。禁用版本信息可以減小庫的體積,但是將不兼容依賴于老版本庫的二進制程序。它還會導(dǎo)致 libstdc++ 的 abi_check 測試失敗,但你可以忽略這個失敗。
--enable-threads=posix|aix|dce|gnat|mach|rtems|solaris|vxworks|win32|nks
--disable-threads
    啟用或禁用線程支持,若啟用,則必須同時明確指定線程模型(不同平臺支持的線程庫并不相同,Linux現(xiàn)在一般使用posix)。這將對Objective-C編譯器、運行時庫,以及C++/Java等面向?qū)ο笳Z言的異常處理產(chǎn)生影響。
--enable-version-specific-runtime-libs
    將運行時庫安裝在編譯器特定的子目錄中 (${libdir}/gcc-lib/${target_alias}/${gcc_version}),而不是默認的${libdir}目錄中。另外,'libstdc++'的頭文件將被安裝在 ${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++ 目錄中(除非同時又指定了 --with-gxx-include-dir)。如果你打算同時安裝幾個不同版本的 GCC ,這個選項就很有用處了。當(dāng)前,libgfortran,libjava,libmudflap,libstdc++,libobjc都支持該選項。
--enable-werror
--disable-werror
    是否將所有編譯器警告當(dāng)作錯誤看待(使用-Werror來編譯)。對于開發(fā)中的版本和快照默認為"yes",對于正式發(fā)布的版本則默認為"no"。
--with-as=pathname
--with-ld=pathname
    指定將來GCC使用的匯編器/連接器的位置,必須使用絕對路徑。如果configure的默認查找過程找不到匯編器/連接器,就會需要該選項;蛘呦到y(tǒng)中有多個匯編器/連接器,也需要它來指定使用哪一個。如果使用GNU的匯編器,那么你必須同時使用GNU連接器。
--with-datarootdir=DATADIR
    將 DATADIR 用作數(shù)據(jù)根目錄,默認值是[PREFIX/share]
--with-docdir=DOCDIR
--with-htmldir=HTMLDIR
--with-pdfdir=PDFDIR
    指定各種文檔的安裝目錄。DOCDIR默認值的默認值是DATADIR,HTMLDIR和PDFDIR的默認值是DOCDIR。
--with-gmp=GMPDIR
--with-gmp-include=GMPINCDIR
--with-gmp-lib=GMPLIBDIR
    指定 GMP 庫的安裝目錄/頭文件目錄/庫目錄。指定GMPDIR相當(dāng)于同時指定了:GMPINCDIR=GMPDIR/include,GMPLIBDIR=GMPDIR/lib 。
--with-mpfr=MPFRDIR
--with-mpfr-include=MPFRINCDIR
--with-mpfr-lib=MPFRLIBDIR
    指定 MPFR 庫的安裝目錄/頭文件目錄/庫目錄。指定MPFRDIR相當(dāng)于同時指定了:MPFRINCDIR=MPFRDIR/include,MPFRLIBDIR=MPFRDIR/lib 。
--with-cloog=CLOOGDIR
--with-cloog_include=CLOOGINCDIR
--with-cloog_lib=CLOOGLIBDIR
    指定CLooG(Chunky Loop Generator)的安裝目錄/頭文件目錄/庫目錄。指定CLOOGDIR相當(dāng)于同時指定了:CLOOGINCDIR=CLOOGDIR/include,CLOOGLIBDIR=CLOOGDIR/lib 。[GCC-4.4新增選項]
--with-ppl=PPLDIR
--with-ppl_include=PPLINCDIR
--with-ppl_lib=PPLLIBDIR
    指定PPL(Parma Polyhedra Library)的安裝目錄/頭文件目錄/庫目錄。指定PPLDIR相當(dāng)于同時指定了:PPLINCDIR=PPLDIR/include,PPLLIBDIR=PPLDIR/lib 。[GCC-4.4新增選項]
--with-gxx-include-dir=DIR
    G++頭文件的安裝目錄,默認為"prefix/include/c++/版本"。
--with-libiconv-prefix[=DIR]
--without-libiconv-prefix
    在 DIR/include 目錄中搜索 libiconv 頭文件,在 DIR/lib 目錄中搜索 libiconv 庫文件。或者根本不使用 libiconv 庫。
--with-libintl-prefix[=DIR]
--without-libintl-prefix
    在 DIR/include 目錄中搜索 libintl 頭文件,在 DIR/lib 目錄中搜索 libintl 庫文件。或者根本不使用 libintl 庫。
--with-local-prefix=DIR
    指定本地包含文件的安裝目錄,不管如何設(shè)置--prefix,其默認值都為 /usr/local 。只有在系統(tǒng)已經(jīng)建立了某些特定的目錄規(guī)則,而不再是在 /usr/local/include 中查找本地安裝的頭文件的時候,該選項才使必須的。不能指定為 /usr ,也不能指定為安裝GCC自身頭文件的目錄(默認為$libdir/gcc/$target/$version/include),因為安裝的頭文件會和系統(tǒng)的頭文件混合,從而造成沖突,導(dǎo)致不能編譯某些程序。
--with-long-double-128
--without-long-double-128
    指定long double類型為 128-bit 或 64-bit(等于double) 。基于 Glibc 2.4 或以上版本編譯時默認為 128-bit ,其他情況默認為 64-bit ;但是可以使用這個選項強制指定。
--with-pic
--without-pic
    試圖僅使用 PIC 或 non-PIC 對象,默認兩者都使用。
--with-slibdir=DIR
    共享庫(libgcc)的安裝目錄,默認等于 --libdir 的值。
--with-system-libunwind
    使用系統(tǒng)中已經(jīng)安裝的libunwind庫,默認自動檢測。
--with-system-zlib
    使用系統(tǒng)中的libz庫,默認使用GCC自帶的庫。
以下選項僅適用于 C++ 語言:
--enable-__cxa_atexit
    用 __cxa_atexit() 代替 atexit() 來登記 C++ 對象的本地靜態(tài)和全局析構(gòu)函數(shù)以符合C++標(biāo)準(zhǔn)對析構(gòu)函數(shù)的處理規(guī)定。啟用它相當(dāng)于在將來調(diào)用 gcc 時默認使用 -fuse-cxa-exit 選項。該選項僅在使用Glibc的時候才有意義。
--disable-c99
    禁止支持 C99 標(biāo)準(zhǔn)。該選項將導(dǎo)致 ABI 接口發(fā)生改變。
--enable-cheaders=c|c_std|c_global
    為 g++ 創(chuàng)建C語言兼容的頭文件,默認為"c_global"。
--enable-clocale[=gnu|ieee_1003.1-2001|generic]
    指定目標(biāo)系統(tǒng)的 locale 模塊,默認值為自動檢測。建議明確設(shè)為"gnu",否則可能會編譯出 ABI 不兼容的 C++ 庫。
--enable-clock-gettime[=yes|no|rt]
    指明如何獲取C++0x草案里面time.clock 中clock_gettime()函數(shù):"yes"表示在libc和libposix4庫中檢查(而libposix4在需要的時候還可能會鏈接到 libstdc++)。"rt"表示還額外在librt庫中查找,這一般并不是一個很好的選擇,因為librt經(jīng)常還會連接到libpthread上,從而使得單線程的程序產(chǎn)生不必要的鎖定開銷。默認值"no"則完全跳過這個檢查。[GCC-4.4新增選項]
--enable-concept-checks
    打開額外的實例化庫模板編譯時檢查(以特定的模板形式),這可以幫助用戶在他們的程序運行之前就發(fā)現(xiàn)這些程序在何處違反了STL規(guī)則。
--enable-cstdio=PACKAGE
    使用目標(biāo)平臺特定的 I/O 包,PACKAGE的默認值是"stdio",也是唯一可用的值。使用這個選項將導(dǎo)致 ABI 接口發(fā)生改變。
--enable-cxx-flags=FLAGS
    編譯 libstdc++ 庫文件時傳遞給編譯器的編譯標(biāo)志,是一個引號界定的字符串。默認為空,表示使用環(huán)境變量 CXXFLAGS 的值。
--enable-fully-dynamic-string
    該選項啟用了一個特殊版本的 basic_string 來禁止在預(yù)處理的靜態(tài)存儲區(qū)域中放置空字符串的優(yōu)化手段。參見 PR libstdc++/16612 獲取更多細節(jié)。
--disable-hosted-libstdcxx
    默認編譯特定于主機環(huán)境的C++庫。使用該選項將僅編譯獨立于主機環(huán)境的C++運行時庫(前者的子集)。
--enable-libstdcxx-allocator[=new|malloc|mt|bitmap|pool]
    指定目標(biāo)平臺特定的底層 std::allocator ,默認自動檢測。使用這個選項將導(dǎo)致 ABI 接口發(fā)生改變。
--enable-libstdcxx-debug
    額外編譯調(diào)試版本的 libstdc++ 庫文件,并默認安裝在 ${libdir}/debug 目錄中。
--enable-libstdcxx-debug-flags=FLAGS
    編譯調(diào)試版本的 libstdc++ 庫文件時使用的編譯器標(biāo)志,默認為"-g3 -O0"
--disable-libstdcxx-pch
    禁止創(chuàng)建預(yù)編譯的 libstdc++ 頭文件(stdc++.h.gch),這個文件包含了所有標(biāo)準(zhǔn) C++ 的頭文件。該選項的默認值等于hosted-libstdcxx的值。
--disable-long-long
    禁止使用模板支持'long long'類型。'long long'是 C99 新引進的類型,也是 GNU 對 C++98 標(biāo)準(zhǔn)的一個擴展。該選項將導(dǎo)致 ABI 接口發(fā)生改變。
--enable-sjlj-exceptions
    強制使用舊式的 setjmp/longjmp 異常處理模型,使用這個選項將導(dǎo)致 ABI 接口發(fā)生改變。默認使用可以大幅降低二進制文件尺寸和內(nèi)存占用的新式的 libunwind 庫進行異常處理。建議不要使用此選項。
--disable-visibility
    禁止 -fvisibility 編譯器選項的使用(使其失效)。
--disable-wchar_t
    禁止使用模板支持多字節(jié)字符類型'wchar_t'。該選項將導(dǎo)致 ABI 接口發(fā)生改變。
以下選項僅用于交叉編譯:
--enable-serial-[{host,target,build}-]configure
    強制為 host, target, build 順序配置子包,如果使用"all"則表示所有子包。
--with-sysroot=DIR
    將DIR看作目標(biāo)系統(tǒng)的根目錄。目標(biāo)系統(tǒng)的頭文件、庫文件、運行時對象都將被限定在其中。其默認值是 ${gcc_tooldir}/sys-root 。
--with-target-subdir=SUBDIR
    為 target 在 SUBDIR 子目錄中進行配置。
--with-newlib
    將'newlib'指定為目標(biāo)系統(tǒng)的C庫進行使用。這將導(dǎo)致 libgcc.a 中的 __eprintf 被忽略,因為它被假定為由'newlib'提供。
--with-build-subdir=SUBDIR
    為 build 在 SUBDIR 子目錄中進行配置。
--with-build-libsubdir=DIR
    指定 build 平臺的庫文件目錄。默認值是SUBDIR。
--with-build-sysroot=sysroot
    在編譯時將'sysroot'當(dāng)作指定 build 平臺的根目錄看待。僅在已經(jīng)使用了--with-sysroot選項的時候,該選項才有意義。
--with-build-time-tools=path
    在給定的path中尋找用于編譯GCC自身的目標(biāo)工具。該目錄中必須包含 ar, as, ld, nm, ranlib, strip 程序,有時還需要包含 objdump 程序。例如,當(dāng)編譯GCC的系統(tǒng)的文件布局和將來部署GCC的目標(biāo)系統(tǒng)不一致時就需要使用此選項。
--with-cross-host=HOST
    這個選項已經(jīng)被反對使用,應(yīng)該使用--with-sysroot來代替其功能。
以下選項意義不大,一般不用考慮它們:
--enable-cld
    啟用它相當(dāng)于將來對32位x86平臺調(diào)用GCC時默認使用-mcld命令行選項,主要用于兼容一些老舊的平臺。
--disable-cloog-version-check
    禁止檢測CLooG(Chunky Loop Generator)的版本是否滿足要求。[GCC-4.4新增選項]
--enable-coverage[=opt|noopt]
    在編譯器每次編譯時收集自身的 coverage 信息。這個僅用于內(nèi)部測試的目的,并且僅在使用GCC編譯的時候才有效。參數(shù)控制著是否在編譯編譯器時使用優(yōu)化,在需要進行 coverage 分析的時候使用"noopt"(默認),在需要進行性能分析的時候使用"opt"。
--disable-dependency-tracking
    禁止對Makefile規(guī)則的依賴性追蹤。
--disable-fast-install
    禁止為快速安裝而進行優(yōu)化。
--enable-fixed-point
    啟用C定點浮點運算(fixed-point arithmetic),這是一種非?焖俚哪M浮點運算的方法,特別是在具有相應(yīng)硬件支持的處理器(比如MIPS)上。在MIPS平臺上默認開啟,在其他平臺上則默認關(guān)閉。
--enable-gold
    僅在與Binutils聯(lián)合編譯時才有意義。使用gold代替GNU ld。gold是Google開發(fā)的連接器,2008年捐贈給FSF,目的是取代現(xiàn)有的GNU ld,但目前兩者還不能完兼容。[GCC-4.4新增選項]
--enable-gather-detailed-mem-stats
    允許收集詳細的內(nèi)存使用信息,將來在調(diào)用 gcc 時如果使用了 -fmem-report 選項就可以打印這些信息。
--enable-generated-files-in-srcdir
    將生成的文件的副本保存在源代碼目錄中,以便于沒有 texinfo, perl, bison, flex 的用戶創(chuàng)建源代碼的歸檔(比如創(chuàng)建正式發(fā)布的tarball)。
--enable-initfini-array
    為構(gòu)造函數(shù)和析構(gòu)函數(shù)使用 .init_array 和 .fini_array (而不是 .init 和 .fini) 節(jié)。該選項的默認值由configure腳本自動檢測決定。
--enable-intermodule
    僅用一步來編譯 compiler ,以達到內(nèi)部模塊最佳化。(什么意思?)
--enable-install-libiberty
    安裝 libiberty 的頭文件(libiberty.h),許多程序都會用到這個庫中的函數(shù)(getopt,strerror,strtol,strtoul)。這個選項經(jīng)過實驗,沒有實際效果(相當(dāng)于disable)。
--disable-largefile
    禁止支持大文件。[GCC-4.4新增選項]
--disable-libada
    禁止編譯GNAT的運行時庫(libada,ADA編譯器的運行時庫)和相應(yīng)的工具。
--disable-libgcj
    禁止編譯GCJ的運行時庫(libgcj,Java編譯器的運行時庫)。
--disable-libtool-lock
    禁止 libtool 鎖定以加快編譯速度(可能會導(dǎo)致并行編譯的失敗)
--enable-linux-futex
    在libgomp和libstdc++庫中使用Linux的futex系統(tǒng)調(diào)用(快速用戶空間互斥體)。默認值根據(jù)內(nèi)核頭文件sys/syscall.h中是否包含futex函數(shù)的定義而定。
--enable-maintainer-mode
    啟用無用的 make 規(guī)則和依賴性(它們有時會導(dǎo)致混淆)。
--enable-objc-gc
    允許在 Objective-C 運行時庫中使用 Boehm 垃圾回收器。當(dāng)前并不支持Boehm,所以該選項沒有實際意義。
--disable-ppl-version-check
    禁止檢測PPL(Parma Polyhedra Library)的版本是否滿足要求。[GCC-4.4新增選項]
--enable-secureplt
    使編譯器默認創(chuàng)建只讀的 plt 項,相當(dāng)于將來調(diào)用 gcc 時默認使用 -msecure-plt 選項。僅對 powerpc-linux 平臺有意義。
--enable-stage1-checking
    對處于 stage1 狀態(tài)的編譯器執(zhí)行額外的檢查。默認值等于--enable-checking選項的值。
--enable-stage1-languages
    在bootstrap時,在 stage1 時使用系統(tǒng)原有的C編譯器編譯更多的語言支持,而不是使用stage1編譯出來的C編譯器來編譯他們。該選項一般僅供編譯器開發(fā)者使用。無默認值,可用的取值為:no, yes, all, ada, c, c++, fortran, java, objc, obj-c++ 。
--enable-tls
--disable-tls
    允許或禁止目標(biāo)系統(tǒng)支持TLS(線程本地存儲),"gcc"子目錄下沒有默認值,"libgcc libgomp libmudflap libstdc++-v3"子目錄下默認為"yes"。一般情況下不需要明確指定,因為 configure 腳本可以自動檢測。僅在你認為檢測不正確的情況下(比如匯編器支持 TLS 但 C 卻不支持或匯編器檢測錯誤)才使用這個選項明確指定。
--enable-twoprocess
    Choose two-process fix methodology(啥意思?)。對于那些不支持雙向pipe的系統(tǒng),必須使用two-process方法。在 mingw32*,beos* 平臺上默認為"yes",其它平臺上默認為"no"。
--enable-werror-always
    不管編譯器是否支持,總是使用-Werror來編譯,也就是將所有編譯器警告當(dāng)作錯誤看待。
--enable-win32-registry=KEY
    僅對Windows平臺有意義。而且即使在Windows平臺上也可以忽略該選項。
--with-gnu-as
--with-gnu-ld
    指定編譯器將來使用的是GNU匯編器/連接器,默認值為未指定。如果你實際使用的不是GNU匯編器/連接器,指定這個選項會引起混淆;另一方面如果你實際使用的是GNU匯編器/連接器,但是卻沒有指定這個選項,也有可能會造成混淆。此選項僅在 hppa, sparc, sparc64 平臺上才有意義。
--with-bugurl=URL
    提示用戶發(fā)送bug報告的URL。默認值是"http://gcc.gnu.org/bugs.html"。
--with-cpp-install-dir=DIR
    除了將用戶可見的 cpp 程序安裝到默認的 PREFIX/bin 目錄外,還將安裝到 prefix/DIR 目錄。
--with-debug-prefix-map='A=B C=D ...'
    在調(diào)試信息中將A映射B,C映射到D...
--with-demangler-in-ld
    嘗試在 GNU ld 中使用 demangler
--with-dwarf2
    指定編譯程序產(chǎn)生的調(diào)試信息默認為DWARF2格式。
--with-gc=[page|zone]
    指定編譯過程中使用的垃圾回收方案(默認為"page")。
--with-included-gettext
    使用軟件包中自帶的 GNU gettext 庫。如果你已經(jīng)使用了Glibc-2.0以上的版本,或者系統(tǒng)中已經(jīng)安裝了GNU gettext軟件包,那么就沒有必要使用這個選項。默認不使用。
--with-pkgversion=PKG
    使用"PKG"代替默認的"GCC"作為版本字符串,這個信息將會在"gcc --version"命令下顯示。比如你可以在其中嵌入編譯時間或第多少次編譯之類的信息。
--with-stabs
    指定將來編譯器產(chǎn)生的調(diào)試信息默認為stabs格式,而不是宿主系統(tǒng)的默認格式。通常GCC產(chǎn)生的默認調(diào)試信息是ECOFF格式,但是它包含的調(diào)試信息沒有stabs多。
編譯、測試、安裝
除了使用 CFLAGS,LDFLAGS 之外,還可以使用 LIBCFLAGS,LIBCXXFLAGS 控制庫文件(由stage3編譯)的編譯器選項?梢栽 make 命令行上使用 BOOT_CFLAGS,BOOT_LDFLAGS 來控制 stage2,stage3 的編譯?梢允褂 make bootstrap4 來增加步驟以避免 stage1 可能被錯誤編譯所導(dǎo)致的錯誤。可以使用 make profiledbootstrap 在編譯stage1時收集一些有用的統(tǒng)計信息,然后使用這些信息編譯最終的二進制文件,這樣可以提升編譯器和相應(yīng)庫文件的執(zhí)行效率。
編譯完畢后可以使用"make check"運行測試套件,然后可以和http://gcc.gnu.org/buildstat.html里面列出來的結(jié)果進行對比,只要"unexpected failures"不要太多就好說。這個測試套件依賴于DejaGnu軟件包,而DejaGnu又依賴于expect,expect依賴于tcl。如果只想運行C++測試,可以使用"make check-g++"命令;如果只想運行C編譯器測試,可以使用"make check-gcc"。還可以制定只運行某些單項測試:比如使用 make check RUNTESTFLAGS="compile.exp -v" 運行編譯測試。另一方面,GCC并不支持使用"make uninstall"進行卸載,建議你將GCC安裝在一個特別的目錄中,然后在不需要的時候直接刪除這個目錄。
因為GCC的安裝依賴于GMP和MPFR,所以下面附上GMP和MPFR的安裝信息,主要是configure選項。
GMP-4.2.4
下面所列選項若未特別說明皆為非默認值。并且僅選擇有實際意義的選項介紹:
--enable-assert
    啟用斷言檢查,主要用于調(diào)試目的。
--enable-alloca=alloca|malloc-reentrant|malloc-notreentrant
    分配臨時工作區(qū)內(nèi)存的方法:
    alloca - 使用libc或編譯器內(nèi)置的方法
    malloc-reentrant - 在堆上使用可重入的(re-entrant)方法分配
    malloc-notreentrant - 在堆上使用全局變量的方法分配
    默認值是優(yōu)先使用alloca,不可用時使用malloc-reentrant。
--enable-cxx
    啟用C++支持(必須同時擁有C++編譯器支持)。也就是將要安裝libgmpxx.la庫和gmpxx.h頭文件。
--enable-fat
    在運行時根據(jù)CPU型號選擇相應(yīng)的底層子程序。這將使得代碼變得臃腫但可以獲得更好的性能。
--disable-fft
    默認情況下,GMP使用 Karatsuba, 3-way Toom, Fermat FFT 三種算法進行乘法運算。而 Fermat FFT 算法僅用于操作數(shù)非常巨大的場合,所以,如果你預(yù)計到并不需要操作非常巨大的數(shù)字,那么可以禁用這個算法,這樣可以減小一些二進制文件的體積。
--enable-mpbsd
    編譯與Berkeley MP接口兼容的庫文件(libmp.{so,a})和頭文件(mp.h)
--enable-nails=偶數(shù)
    在limbs中使用nail(?何意?)
--enable-profile
    啟用 profiling 信息相關(guān)的庫文件編譯。主要用于調(diào)試目的。
--disable-shared
--disable-static
    禁止編譯共享或靜態(tài)版本的庫。
--with-readline
    在calc演示程序中使用readline庫,默認值自動檢測。
--with-pic
--without-pic
    試圖僅使用 PIC 或 non-PIC 對象,默認兩者都使用。
MPFR-2.3.2
此包依賴于GMP,并且總是在http://www.mpfr.org/mpfr-current/patches存放最新版本的patch,可以使用
patch -N -Z -p1 =4.2)
--enable-logging
    啟用MPFR日志(必須要有底層操作系統(tǒng)的支持)
--disable-shared
--disable-static
    禁止編譯共享或靜態(tài)版本的庫。
--enable-tests-timeout=NUM
    設(shè)定測試程序的超時秒數(shù)(NUM<=9999),默認沒有超時限制。
--enable-thread-safe
    編譯線程安全的MPFR庫
--enable-warnings
    允許MPFR將錯誤輸出到stderr
--with-gmp=GMPDIR
--with-gmp-include=GMPINCDIR
--with-gmp-lib=GMPLIBDIR
    指定 GMP 庫的安裝目錄/頭文件目錄/庫目錄。指定GMPDIR相當(dāng)于同時指定了:GMPINCDIR=GMPDIR/include,GMPLIBDIR=GMPDIR/lib 。
--with-mulhigh_size=NUM
    mulhigh的內(nèi)置閾值表大小,沒有默認值。
--with-pic
--without-pic
    試圖僅使用 PIC 或 non-PIC 對象,默認兩者都使用。
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/7793/showart_1797319.html
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP