Glibc Binutils GCC 安裝指南(轉)

Glibc Binutils GCC 安裝指南

做者:金步國

版權聲明

本文做者是一位自由軟件愛好者,因此本文雖然不是軟件,可是本着 GPL 的精神發佈。任何人均可以自由使用、轉載、複製和再分發,但必須保留做者署名,亦不得對聲明中的任何條款做任何形式的修改,也不得附加任何其它條件。您能夠自由連接、下載、傳播此文檔,但前提是必須保證全文完整轉載,包括完整的版權信息和做譯者聲明。 php

其餘做品

本文做者十分願意與他人共享勞動成果,若是你對個人其餘翻譯做品或者技術文章有興趣,能夠在以下位置查看現有做品的列表: html

BUG報告,切磋與探討

因爲做者水平有限,所以不能保證做品內容準確無誤,請在閱讀中自行鑑別。若是你發現了做品中的錯誤,請您來信指出,哪怕是錯別字也好,任何提升做品質量的建議我都將虛心接納。若是你願意就做品中的相關內容與我進行進一步切磋與探討,也歡迎你與我聯繫。聯繫方式:MSN: csfrank122@hotmail.com java

Glibc 安裝指南(適用於2.6.1 → 2.9)

安裝信息的來源

要點提示

編譯Glibc的時候應該儘量使用最新的內核頭文件,至少要使用 2.6.16 以上版本的內核,先前的版本有一些缺陷會致使"make check"時一些與pthreads測試相關的項目失敗。使用高版本內核頭文件編譯的Glibc二進制文件徹底能夠運行在較低版本的內核上,而且當你升級內核後新內核的特性仍然能夠獲得充分發揮而無需從新編譯Glibc。可是若是編譯時使用的頭文件的版本較低,那麼運行在更高版本的內核上時,新內核的特性就不能獲得充分發揮。更多細節能夠查看[八卦故事]內核頭文件傳奇的跟帖部分。 node

推薦使用GCC-4.1以上的版本編譯,老版本的GCC可能會生成有缺陷的代碼。 linux

不要在運行中的系統上安裝 Glibc,不然將會致使系統崩潰,至少應當將新 Glibc 安裝到其餘的單獨目錄,以保證不覆蓋當前正在使用的 Glibc 。 c++

Glibc 不能在源碼目錄中編譯,它必須在一個額外分開的目錄中編譯。這樣在編譯發生錯誤的時候,就能夠刪除整個編譯目錄從新開始。 算法

源碼樹下的Makeconfig文件中有許多用於特定目的的變量,你能夠在編譯目錄下建立一個configparms文件來改寫這些變量。執行make命令的時候configparms文件中的內容將會按照Makefile規則進行解析。好比能夠經過在其中設置 CFLAGS LDFLAGS 環境變量來優化編譯,設置 CC BUILD_CC AR RANLIB 來指定交叉編譯環境。 數據庫

須要注意的是有些測試項目假定是以非 root 身份執行的,所以咱們強烈建議你使用非 root 身份編譯和測試 Glibc 。 編程

從2.8版本開始,Glibc的開發者再也不提供tarball,而只提供snapshot,下載地址在這裏:ftp://sourceware.org/pub/glibc/snapshots/ bootstrap

配置選項

下列選項皆爲非默認值[特別說明的除外]

--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文件系統標準要求基本庫必須位於 /lib 目錄而且必須與根目錄在同一個分區上,可是 /usr 能夠在其餘分區甚至是其餘磁盤上。所以,若是在Linux平臺上指定 --prefix=/usr ,那麼基本庫部分將自動安裝到 /lib 目錄下,而非基本庫部分則會自動安裝到 /usr/lib 目錄中,同時將使用 /etc 做爲配置目錄,也就是等價於"slibdir=/lib sysconfdir=/etc"。可是若是保持默認值或指定其餘目錄,那麼全部組件都間被安裝到PREFIX目錄下。--disable-sanity-checks真正禁用線程(僅在特殊環境下使用該選項)。--enable-check-abi在"make check"時執行"make check-abi"。[提示]在個人機器上始終致使check-abi-libm測試失敗。--disable-shared不編譯共享庫(即便平臺支持)。在支持 ELF 而且使用 GNU 鏈接器的系統上默認爲enable 。[提示] --disable-static 選項其實是不存在的,靜態庫老是被無條件的編譯和安裝。--enable-profile啓用 profiling 信息相關的庫文件編譯。主要用於調試目的。--enable-omitfp編譯時忽略幀指示器(使用 -fomit-frame-pointer 編譯),並採起一些其餘優化措施。忽略幀指示器能夠提升運行效率,可是調試將變得不可用,而且可能生成含有 bug 的代碼。使用這個選項還將致使額外編譯帶有調試信息的非優化版本的靜態庫(庫名稱以"_g"結尾)。--enable-bounded啓用運行時邊界檢查(好比數組越界),這樣會下降運行效率,但能防止某些溢出漏洞。--disable-versioning不在共享庫對象中包含符號的版本信息。這樣能夠減少庫的體積,可是將不兼容依賴於老版本 C 庫的二進制程序。[提示]在個人機器上使用此選項老是致使編譯失敗。--enable-oldest-abi=ABI啓用老版本的應用程序二進制接口支持。ABI是Glibc的版本號,只有明確指定版本號時此選項纔有效。--enable-stackguard-randomization在程序啓動時使用一個隨機數初始化 __stack_chk_guard ,主要用來抵抗惡意攻擊。--enable-add-ons[=DIRS...]爲了減少軟件包的複雜性,一些可選的libc特性被以單獨的軟件包發佈,好比'linuxthreads'(如今已經被廢棄了),他們被稱爲'add-ons'。要使用這些額外的包,能夠將他們解壓到Glibc的源碼樹根目錄下,而後使用此選項將DIR1,DIR2,...中的附加軟件包包含進來。其中的"DIR"是附加軟件包的目錄名。默認值"yes"表示編譯全部源碼樹根目錄下找到的附加軟件包。--disable-hidden-plt默認狀況下隱藏僅供內部調用的函數,以免這些函數被加入到過程連接表(PLT,Procedure Linkage Table)中,這樣能夠減少 PLT 的體積並將僅供內部使用的函數隱藏起來。而使用該選項將把這些函數暴露給外部用戶。--enable-bind-now禁用"lazy binding",也就是動態鏈接器在載入 DSO 時就解析全部符號(無論應用程序是否用獲得),默認行爲是"lazy binding",也就是僅在應用程序首次使用到的時候纔對符號進行解析。由於在大多數狀況下,應用程序並不須要使用動態庫中的全部符號,因此默認的 "lazy binding"能夠提升應用程序的加載性能並節約內存用量。然而,在兩種狀況下,"lazy binding"是不利的:①由於第一次調用DSO中的函數時,動態鏈接器要先攔截該調用來解析符號,因此初次引用DSO中的函數所花的時間比再次調用要花的時間長,可是某些應用程序不能容忍這種不可預知性。②若是一個錯誤發生而且動態鏈接器不能解析該符號,動態鏈接器將終止整個程序。在"lazy binding"方式下,這種狀況可能發生在程序運行過程當中的某個時候。某些應用程序也是不能容忍這種不可預知性的。經過關掉"lazy binding"方式,在應用程序接受控制權以前,讓動態鏈接器在處理進程初始化期間就發現這些錯誤,而不要到運行時纔出亂子。--enable-static-nss編譯靜態版本的NSS(Name Service Switch)庫。僅在/etc/nsswitch.conf中只使用dns和files的狀況下,NSS才能編譯成靜態庫,而且你還須要在靜態編譯應用程序的時候明確的鏈接全部與NSS庫相關的庫才行[好比:gcc -static test.c -o test -Wl,-lc,-lnss_files,-lnss_dns,-lresolv]。不推薦使用此選項,由於鏈接到靜態NSS庫的程序不能動態配置以使用不一樣的名字數據庫。--disable-force-install不強制安裝當前新編譯的版本(即便已存在的文件版本更新)。--enable-kernel=VERSIONVERSION 的格式是 X.Y.Z,表示編譯出來的 Glibc 支持的最低內核版本。VERSION 的值越高(不能超過內核頭文件的版本),加入的兼容性代碼就越少,庫的運行速度就越快。--enable-all-warnings在編譯時顯示全部編譯器警告,也就是使用 -Wall 選項編譯。--with-gd
--with-gd-include
--with-gd-lib指定libgd的安裝目錄(DIR/include和DIR/lib)。後兩個選項分別指定包含文件和庫目錄。--without-fp僅在硬件沒有浮點運算單元而且操做系統沒有模擬的狀況下使用。x86 與 x86_64 的 CPU 都有專門的浮點運算單元。並且 Linux 有 FPU 模擬。簡單的說,不要 without 這個選項!由於它會致使許多問題!--with-binutils=DIR明確指定編譯時使用的Binutils(as,ld)所在目錄。--with-elf指定使用 ELF 對象格式,默認不使用。建議在支持 ELF 的 Linux 平臺上明確指定此選項。--with-selinux
--without-selinux啓用/禁用 SELinux 支持,默認值自動檢測。--with-xcoff使用XCOFF對象格式(主要用於windows)。--without-cvs不訪問CVS服務器。推薦使用該選項,特別對於從CVS下載的的版本。--with-headers=DIR指定內核頭文件的所在目錄,在Linux平臺上默認是'/usr/include'。--without-tls禁止編譯支持線程本地存儲(TLS)的庫。使用這個選項將致使兼容性問題。--without-__thread即便平臺支持也不使用TSL特性。建議不要使用該選項。--with-cpu=CPU在 gcc 命令行中加入"-mcpu=CPU"。鑑於"-mcpu"已經被反對使用,因此建議不要設置該選項,或者設爲 --without-cpu 。

編譯與測試

使用 make 命令編譯,使用 make check 測試。若是 make check 沒有徹底成功,就千萬不要使用這個編譯結果。須要注意的是有些測試項目假定是以非 root 身份執行的,所以咱們強烈建議你使用非 root 身份編譯和測試。

測試中須要使用一些已經存在的文件(包括隨後的安裝過程),好比 /etc/passwd, /etc/nsswitch.conf 之類。請確保這些文件中包含正確的內容。

安裝與配置

使用 make install 命令安裝。好比:make install LC_ALL=C

若是你打算將此 Glibc 安裝爲主 C 庫,那麼咱們強烈建議你關閉系統,從新引導到單用戶模式下安裝。這樣能夠將可能的損害減少到最低。

安裝後須要配置 GCC 以使其使用新安裝的 C 庫。最簡單的辦法是使用恰當 GCC 的編譯選項(好比 -Wl,--dynamic-linker=/lib/ld-linux.so.2 )從新編譯 GCC 。而後還須要修改 specs 文件(一般位於 /usr/lib/gcc-lib/TARGET/VERSION/specs ),這個工做有點像巫術,調整實例請參考 LFS 中的兩次工具鏈調整。

能夠在 make install 命令行使用'install_root'變量指定安裝實際的安裝目錄(不一樣於 --prefix 指定的值)。這個在 chroot 環境下或者製做二進制包的時候一般頗有用。'install_root'必須使用絕對路徑。

被'grantpt'函數調用的輔助程序'/usr/libexec/pt_chown'以 setuid 'root' 安裝。這個可能成爲安全隱患。若是你的 Linux 內核支持'devptsfs'或'devfs'文件系統提供的 pty slave ,那麼就不須要使用 pt_chown 程序。

安裝完畢以後你還須要配置時區和 locale 。使用 localedef 來配置locale 。好比使用'localedef -i de_DE -f ISO-8859-1 de_DE'將 locale 設置爲'de_DE.ISO-8859-1'。能夠在編譯目錄中使用'make localedata/install-locales'命令配置全部可用的 locale ,可是通常不須要這麼作。

時區使用'TZ'環境變量設置。tzselect 腳本能夠幫助你選擇正確的值。設置系統全局範圍內的時區能夠將 /etc/localtime 文件鏈接到 /usr/share/zoneinfo 目錄下的正確文件上。好比對於中國人能夠'ln -s /usr/share/zoneinfo/PRC /etc/localtime'。

Binutils 安裝指南(適用於2.18 → 2.19)

安裝信息的來源

  • 源碼包內的下列文件:各級目錄下的configure腳本   README   {bfd,binutils,gas,gold,libiberty}/README

要點提示

若是想與GCC聯合編譯,那麼能夠將binutils包的內容解壓到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禁用本地語言支持(它容許按照非英語的本地語言顯示警告和錯誤消息)。編譯時出現"undefined reference to 'libintl_gettext'"錯誤則必須禁用。--disable-rpath不在二進制文件中硬編碼庫文件的路徑。--disable-multilib禁止編譯適用於多重目標體系的庫。例如,在x86_64平臺上,默認既能夠生成64位代碼,也能夠生成32位代碼,若使用此選項,那麼將只能生成64位代碼。--enable-cgen-maint=CGENDIR編譯cgen相關的文件[主要用於GDB調試]。--enable-shared[=PKG[,...]]
--disable-shared
--enable-static[=PKG[,...]]
--disable-static容許/禁止編譯共享或靜態版本的庫和可執行程序,所有可識別的PKG以下:binutils,gas,gprof,ld,bfd,opcodes,libiberty(僅支持做爲靜態庫)。static在全部目錄下的默認值都是"yes";而shared在不一樣子目錄下默認值不一樣,有些爲"yes"(binutils,gas,gprof,ld)有些爲"no"(bfd,opcodes,libiberty)。--enable-install-libbfd
--disable-install-libbfd容許或禁止安裝 libbfd 以及相關的頭文件( libbfd 是二進制文件描述庫,用於讀寫目標文件".o",被GDB/ld/as等程序使用)。本地編譯或指定--enable-shared的狀況下默認值爲"yes",不然默認值爲"no"。--enable-64-bit-bfd讓BFD支持64位目標,若是但願在32位平臺上編譯64程序就須要使用這個選項。若是指定的目標(TARGET)是64位則此選項默認打開,不然默認關閉(即便 --enable-targets=all 也是如此)。--enable-elf-stt-common容許BFD生成STT_COMMON類型的ELF符號。[2.19版本新增選項]--enable-checking
--disable-checking容許 as 執行運行時檢查。正式發佈版本默認禁用,快照版本默認啓用。--disable-werror禁止將全部編譯器警告看成錯誤看待(由於當編譯器爲GCC時默認使用-Werror)。--enable-got=target|single|negative|multigot指定GOT的處理模式。默認值是"target"。[2.19版本新增選項]--enable-gold使用gold代替GNU ld。gold是Google開發的鏈接器,2008年捐贈給FSF,目的是取代現有的GNU ld,但目前二者還不能完兼容。[2.19版本新增選項]--enable-plugins啓用gold鏈接器的插件支持。[2.19版本新增選項]--enable-threads編譯多線程版本的gold鏈接器。[2.19版本新增選項]--with-lib-path=dir1:dir2...指定編譯出來的binutils工具(好比:ld)未來默認的庫搜索路徑,在絕大多數時候其默認值是"/lib:/usr/lib"。這個工做也能夠經過設置 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聯合編譯時纔有意義,其含義與GCC相應選項的含義徹底同樣,默認值也相同。

--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

如下選項僅用於交叉編譯環境

--enable-serial-[{host,target,build}-]configure強制爲 host, target, build 順序配置子包,若是使用"all"則表示全部子包。--with-sysroot=dir將 dir 看做目標系統的根目錄。目標系統的頭文件、庫文件、運行時對象都將被限定在其中。--with-target-subdir=SUBDIR爲 target 在 SUBDIR 子目錄中進行配置。--with-newlib將'newlib'(另外一種標準C庫,主要用於嵌入式環境)指定爲目標系統的C庫進行使用。--with-build-sysroot=sysroot在編譯時將'sysroot'看成指定 build 平臺的根目錄看待。僅在已經使用了--with-sysroot選項的時候,該選項纔有意義。--with-build-subdir=SUBDIR爲 build 在 SUBDIR 子目錄中進行配置。--with-build-libsubdir=DIR指定 build 平臺的庫文件目錄。默認值是SUBDIR。--with-build-time-tools=path在給定的path中尋找用於編譯Binutils自身的目標工具。該目錄中必須包含 ar, as, ld, nm, ranlib, strip 程序,有時還須要包含 objdump 程序。例如,當編譯Binutils的系統的文件佈局和未來部署Binutils的目標系統不一致時就須要使用此選項。--with-cross-host=HOST這個選項已經被反對使用,應該使用--with-sysroot來代替其功能。

如下選項意義不大,通常不用考慮它們

--disable-dependency-tracking禁止對Makefile規則的依賴性追蹤。--disable-largefile禁止支持大文件。[2.19版本新增選項]--disable-libtool-lock禁止 libtool 鎖定以加快編譯速度(可能會致使並行編譯的失敗)--disable-build-warnings禁止顯示編譯時的編譯器警告,也就是使用"-w"編譯器選項進行編譯。--disable-fast-install禁止爲快速安裝而進行優化。--enable-maintainer-mode啓用無用的 make 規則和依賴性(它們有時會致使混淆)--enable-commonbfdlib
--disable-commonbfdlib容許或禁止編譯共享版本的 BFD/opcodes/libiberty 庫。分析configure腳本後發現這個選項事實上沒有任何實際效果。--enable-install-libiberty安裝 libiberty 的頭文件(libiberty.h),許多程序都會用到這個庫中的函數(getopt,strerror,strtol,strtoul)。這個選項通過實驗,沒有實際效果(至關於disable)。--enable-secureplt使得binutils默認建立只讀的 plt 項。至關於未來調用 gcc 時默認使用 -msecure-plt 選項。僅對 powerpc-linux 平臺有意義。--enable-targets=TARGET,TARGET,TARGET...使BFD在默認格式以外再支持多種其它平臺的二進制文件格式,"all"表示全部已知平臺。在32位系統上,即便使用"all"也只能支持全部32位目標,除非同時使用 --enable-64-bit-bfd 選項。因爲目前 gas 並不能使用內置的默認平臺以外的其它目標,所以這個選項沒什麼實際意義。此選項在全部目錄下都沒有默認值。但對於2.19版本,此選項在gold子目錄下的默認值是"all"。--with-bugurl=URL
--without-bugurl指定發送bug報告的URL/禁止發送bug報告。默認值是"http://www.sourceware.org/bugzilla/"。--with-datarootdir=DATADIR將 DATADIR 用做數據根目錄,默認值是[PREFIX/share]--with-docdir=DOCDIR
--with-htmldir=HTMLDIR
--with-pdfdir=PDFDIR指定各類文檔的安裝目錄。DOCDIR默認值的默認值是DATADIR,HTMLDIR和PDFDIR的默認值是DOCDIR。--with-included-gettext使用軟件包中自帶的 GNU gettext 庫。若是你已經使用了Glibc-2.0以上的版本,或者系統中已經安裝了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 ...'在調試信息中創建 A-B,C-D, ... 這樣的映射關係。默認爲空。[2.19版本新增選項]

環境變量

tooldir可執行文件的安裝目錄。其默認值是"$(exec_prefix)/$(target_alias)"。

GCC 安裝指南(適用於4.3 → 4.4)

安裝信息的來源

要點提示

從GCC-4.3起,安裝GCC將依賴於GMP-4.1以上版本和MPFR-2.3.2以上版本。若是將這兩個軟件包分別解壓到GCC源碼樹的根目錄下,並分別命名爲"gmp"和"mpfr",那麼GCC的編譯程序將自動將二者與GCC一塊兒編譯。建議儘量使用最新的GMP和MPFR版本。

推薦用一個新建的目錄來編譯GCC,而不是在源碼目錄中,這一點玩過LFS的兄弟都很熟悉了。另外,若是先前在編譯中出現了錯誤,推薦使用 make distclean 命令進行清理,而後從新運行 configure 腳本進行配置,再在另一個空目錄中進行編譯。

若是想要安裝C++編譯器,那麼 libstdc++ 將要求系統的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並不是嚴格必須,即便缺乏上述 locale ,C++編譯器也不會失效,只是libstdc++就不能提供"named locale"特性了,而且測試程序也會跳過與此相關的測試。

配置選項

[注意]這裏僅包含適用於 C/C++ 語言編譯器、十進制數字擴展庫(libdecnumber)、在多處理機上編寫並行程序的應用編程接口GOMP庫(libgomp)、大雜燴的libiberty庫、執行運行時邊界檢查的庫(libmudflap)、保護堆棧溢出的庫(libssp)、標準C++庫(libstdc++) 相關的選項。也就是至關於 gcc-core 與 gcc-g++ 兩個子包的選項。並不包括僅僅適用於其餘語言的選項。

每個 --enable 選項都有一個對應的 --disable 選項,一樣,每個 --with 選項也都用一個對應的 --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禁用本地語言支持(它容許按照非英語的本地語言顯示警告和錯誤消息)。編譯時出現"undefined reference to 'libintl_gettext'"錯誤則必須禁用。--disable-rpath不在二進制文件中硬編碼庫文件的路徑。--enable-bootstrap
--disable-bootstrap"bootstrap"的意思是用第一次編譯生成的程序來第二次編譯本身,而後又用第二次編譯生成的程序來第三次編譯本身,最後比較第二次和第三次編譯的結果,以確保編譯器能毫無差錯的編譯自身,這一般代表編譯是正確的。非交叉編譯的狀況下enable是默認值;交叉編譯的狀況下,disable是默認值。--enable-checking[=LIST]該選項會在編譯器內部生成一致性檢查的代碼,它並不改變編譯器生成的二進制結果。這樣致使編譯時間增長,而且僅在使用GCC做爲編譯器的時候纔有效,可是對輸出結果沒有影響。在"gcc"子目錄下,對從CVS下載的版本默認值是"yes"(=assert,misc,tree,gc,rtlflag,runtime),對於正式發佈的版本則是"release"(=assert,runtime),在"libgcc"子目錄下,默認值始終是"no"。能夠從 "assert,df,fold,gc,gcac,misc,rtlflag,rtl,runtime,tree,valgrind"中選擇你想要檢查的項目(逗號隔開的列表,"all"表示所有),其中rtl,gcac,valgrind很是耗時。使用 --disable-checking 徹底禁止這種檢查會增長未能檢測內部錯誤的風險,因此不建議這樣作。--enable-languages=lang1,lang2,...只安裝指定語言的編譯器及其運行時庫,可使用的語言是:ada, c, c++, fortran, java, objc, obj-c++ ,若不指定則安裝全部默承認用的語言(ada和obj-c++爲非默認語言)。--disable-multilib禁止編譯適用於多重目標體系的庫。例如,在x86_64平臺上,編譯器默認既能夠生成64位代碼,也能夠生成32位代碼,若使用此選項,那麼將只能生成64位代碼。--enable-shared[=PKG[,...]]
--disable-shared
--enable-static[=PKG[,...]]
--disable-static容許/禁止編譯共享或靜態版本的庫,所有可識別的庫以下:libgcc,libstdc++,libffi,zlib,boehm-gc,ada,libada,libjava,libobjc,libiberty(僅支持做爲靜態庫)。static在全部目錄下的默認值都是"yes";shared除了在libiberty目錄下的默認值是"no"外,在其它目錄下的默認值也都是"yes"。--enable-decimal-float[=bid|dpd]
--disable-decimal-float啓用或禁用 libdecnumber 庫符合 IEEE 754-2008 標準的 C 語言十進制浮點擴展,還能夠進一步選擇浮點格式(bid是i386與x86_64的默認值;dpd是PowerPC的默認值)。在 PowerPC/i386/x86_64 GNU/Linux 系統默認啓用,在其餘系統上默認禁用。--disable-libgomp不編譯在多處理機上編寫並行程序的應用編程接口GOMP庫(libgomp)。--disable-libmudflap不編譯執行運行時邊界檢查的庫(libmudflap)。--disable-libssp不編譯保護緩衝區溢出的運行時庫。--disable-symvers禁用共享庫對象中符號包含的版本信息。使用這個選項將致使 ABI 發生改變。禁用版本信息能夠減少庫的體積,可是將不兼容依賴於老版本庫的二進制程序。它還會致使 libstdc++ 的 abi_check 測試失敗,但你能夠忽略這個失敗。--enable-threads=posix|aix|dce|gnat|mach|rtems|solaris|vxworks|win32|nks
--disable-threads啓用或禁用線程支持,若啓用,則必須同時明確指定線程模型(不一樣平臺支持的線程庫並不相同,Linux如今通常使用posix)。這將對Objective-C編譯器、運行時庫,以及C++/Java等面嚮對象語言的異常處理產生影響。--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 ,這個選項就頗有用處了。當前,libgfortran,libjava,libmudflap,libstdc++,libobjc都支持該選項。--enable-werror
--disable-werror是否將全部編譯器警告看成錯誤看待(使用-Werror來編譯)。對於開發中的版本和快照默認爲"yes",對於正式發佈的版本則默認爲"no"。--with-as=pathname
--with-ld=pathname指定未來GCC使用的彙編器/鏈接器的位置,必須使用絕對路徑。若是configure的默認查找過程找不到彙編器/鏈接器,就會須要該選項。或者系統中有多個彙編器/鏈接器,也須要它來指定使用哪個。若是使用GNU的彙編器,那麼你必須同時使用GNU鏈接器。--with-datarootdir=DATADIR將 DATADIR 用做數據根目錄,默認值是[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至關於同時指定了:GMPINCDIR=GMPDIR/include,GMPLIBDIR=GMPDIR/lib 。--with-mpfr=MPFRDIR
--with-mpfr-include=MPFRINCDIR
--with-mpfr-lib=MPFRLIBDIR指定 MPFR 庫的安裝目錄/頭文件目錄/庫目錄。指定MPFRDIR至關於同時指定了:MPFRINCDIR=MPFRDIR/include,MPFRLIBDIR=MPFRDIR/lib 。--with-cloog=CLOOGDIR
--with-cloog_include=CLOOGINCDIR
--with-cloog_lib=CLOOGLIBDIR指定 CLooG(Chunky Loop Generator)的安裝目錄/頭文件目錄/庫目錄。指定CLOOGDIR至關於同時指定了: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至關於同時指定了:PPLINCDIR=PPLDIR/include,PPLLIBDIR=PPLDIR/lib 。[GCC-4.4新增選項]--with-gxx-include-dir=DIRG++頭文件的安裝目錄,默認爲"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指定本地包含文件的安裝目錄,無論如何設置--prefix,其默認值都爲 /usr/local 。只有在系統已經創建了某些特定的目錄規則,而再也不是在 /usr/local/include 中查找本地安裝的頭文件的時候,該選項才使必須的。不能指定爲 /usr ,也不能指定爲安裝GCC自身頭文件的目錄(默認爲$libdir/gcc/$target/$version/include),由於安裝的頭文件會和系統的頭文件混合,從而形成衝突,致使不能編譯某些程序。--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使用系統中已經安裝的libunwind庫,默認自動檢測。--with-system-zlib使用系統中的libz庫,默認使用GCC自帶的庫。

如下選項僅適用於 C++ 語言:

--enable-__cxa_atexit用 __cxa_atexit() 代替 atexit() 來登記 C++ 對象的本地靜態和全局析構函數以符合C++標準對析構函數的處理規定。啓用它至關於在未來調用 gcc 時默認使用 -fuse-cxa-exit 選項。該選項僅在使用Glibc的時候纔有意義。--disable-c99禁止支持 C99 標準。該選項將致使 ABI 接口發生改變。--enable-cheaders=c|c_std|c_global爲 g++ 建立C語言兼容的頭文件,默認爲"c_global"。--enable-clocale[=gnu|ieee_1003.1-2001|generic]指定目標系統的 locale 模塊,默認值爲自動檢測。建議明確設爲"gnu",不然可能會編譯出 ABI 不兼容的 C++ 庫。--enable-clock-gettime[=yes|no|rt]指明如何獲取C++0x草案裏面time.clock中clock_gettime()函數:"yes"表示在libc和libposix4庫中檢查(而libposix4在須要的時候還可能會連接到libstdc++)。"rt"表示還額外在librt庫中查找,這通常並非一個很好的選擇,由於librt常常還會鏈接到libpthread上,從而使得單線程的程序產生沒必要要的鎖定開銷。默認值"no"則徹底跳過這個檢查。[GCC-4.4新增選項]--enable-concept-checks打開額外的實例化庫模板編譯時檢查(以特定的模板形式),這能夠幫助用戶在他們的程序運行以前就發現這些程序在何處違反了STL規則。--enable-cstdio=PACKAGE使用目標平臺特定的 I/O 包,PACKAGE的默認值是"stdio",也是惟一可用的值。使用這個選項將致使 ABI 接口發生改變。--enable-cxx-flags=FLAGS編譯 libstdc++ 庫文件時傳遞給編譯器的編譯標誌,是一個引號界定的字符串。默認爲空,表示使用環境變量 CXXFLAGS 的值。--enable-fully-dynamic-string該選項啓用了一個特殊版本的 basic_string 來禁止在預處理的靜態存儲區域中放置空字符串的優化手段。參見 PR libstdc++/16612 獲取更多細節。--disable-hosted-libstdcxx默認編譯特定於主機環境的C++庫。使用該選項將僅編譯獨立於主機環境的C++運行時庫(前者的子集)。--enable-libstdcxx-allocator[=new|malloc|mt|bitmap|pool]指定目標平臺特定的底層 std::allocator ,默認自動檢測。使用這個選項將致使 ABI 接口發生改變。--enable-libstdcxx-debug額外編譯調試版本的 libstdc++ 庫文件,並默認安裝在 ${libdir}/debug 目錄中。--enable-libstdcxx-debug-flags=FLAGS編譯調試版本的 libstdc++ 庫文件時使用的編譯器標誌,默認爲"-g3 -O0"--disable-libstdcxx-pch禁止建立預編譯的 libstdc++ 頭文件(stdc++.h.gch),這個文件包含了全部標準 C++ 的頭文件。該選項的默認值等於hosted-libstdcxx的值。--disable-long-long禁止使用模板支持'long long'類型。'long long'是 C99 新引進的類型,也是 GNU 對 C++98 標準的一個擴展。該選項將致使 ABI 接口發生改變。--enable-sjlj-exceptions強制使用舊式的 setjmp/longjmp 異常處理模型,使用這個選項將致使 ABI 接口發生改變。默認使用能夠大幅下降二進制文件尺寸和內存佔用的新式的 libunwind 庫進行異常處理。建議不要使用此選項。--disable-visibility禁止 -fvisibility 編譯器選項的使用(使其失效)。--disable-wchar_t禁止使用模板支持多字節字符類型'wchar_t'。該選項將致使 ABI 接口發生改變。

如下選項僅用於交叉編譯:

--enable-serial-[{host,target,build}-]configure強制爲 host, target, build 順序配置子包,若是使用"all"則表示全部子包。--with-sysroot=DIR將DIR看做目標系統的根目錄。目標系統的頭文件、庫文件、運行時對象都將被限定在其中。其默認值是 ${gcc_tooldir}/sys-root 。--with-target-subdir=SUBDIR爲 target 在 SUBDIR 子目錄中進行配置。--with-newlib將'newlib'指定爲目標系統的C庫進行使用。這將致使 libgcc.a 中的 __eprintf 被忽略,由於它被假定爲由'newlib'提供。--with-build-subdir=SUBDIR爲 build 在 SUBDIR 子目錄中進行配置。--with-build-libsubdir=DIR指定 build 平臺的庫文件目錄。默認值是SUBDIR。--with-build-sysroot=sysroot在編譯時將'sysroot'看成指定 build 平臺的根目錄看待。僅在已經使用了--with-sysroot選項的時候,該選項纔有意義。--with-build-time-tools=path在給定的path中尋找用於編譯GCC自身的目標工具。該目錄中必須包含 ar, as, ld, nm, ranlib, strip 程序,有時還須要包含 objdump 程序。例如,當編譯GCC的系統的文件佈局和未來部署GCC的目標系統不一致時就須要使用此選項。--with-cross-host=HOST這個選項已經被反對使用,應該使用--with-sysroot來代替其功能。

如下選項意義不大,通常不用考慮它們:

--enable-cld啓用它至關於未來對32位x86平臺調用GCC時默認使用-mcld命令行選項,主要用於兼容一些老舊的平臺。--disable-cloog-version-check禁止檢測 CLooG(Chunky Loop Generator)的版本是否知足要求。[GCC-4.4新增選項]--enable-coverage[=opt|noopt]在編譯器每次編譯時收集自身的 coverage 信息。這個僅用於內部測試的目的,而且僅在使用GCC編譯的時候纔有效。參數控制着是否在編譯編譯器時使用優化,在須要進行 coverage 分析的時候使用"noopt"(默認),在須要進行性能分析的時候使用"opt"。--disable-dependency-tracking禁止對Makefile規則的依賴性追蹤。--disable-fast-install禁止爲快速安裝而進行優化。--enable-fixed-point啓用C定點浮點運算(fixed-point arithmetic),這是一種很是快速的模擬浮點運算的方法,特別是在具備相應硬件支持的處理器(好比MIPS)上。在MIPS平臺上默認開啓,在其餘平臺上則默認關閉。--enable-gold僅在與Binutils聯合編譯時纔有意義。使用gold代替GNU ld。gold是Google開發的鏈接器,2008年捐贈給FSF,目的是取代現有的GNU ld,但目前二者還不能完兼容。[GCC-4.4新增選項]--enable-gather-detailed-mem-stats容許收集詳細的內存使用信息,未來在調用 gcc 時若是使用了 -fmem-report 選項就能夠打印這些信息。--enable-generated-files-in-srcdir將生成的文件的副本保存在源代碼目錄中,以便於沒有 texinfo, perl, bison, flex 的用戶建立源代碼的歸檔(好比建立正式發佈的tarball)。--enable-initfini-array爲構造函數和析構函數使用 .init_array 和 .fini_array (而不是 .init 和 .fini) 節。該選項的默認值由configure腳本自動檢測決定。--enable-intermodule僅用一步來編譯 compiler ,以達到內部模塊最佳化。(什麼意思?)--enable-install-libiberty安裝 libiberty 的頭文件(libiberty.h),許多程序都會用到這個庫中的函數(getopt,strerror,strtol,strtoul)。這個選項通過實驗,沒有實際效果(至關於disable)。--disable-largefile禁止支持大文件。[GCC-4.4新增選項]--disable-libada禁止編譯GNAT的運行時庫(libada,ADA編譯器的運行時庫)和相應的工具。--disable-libgcj禁止編譯GCJ的運行時庫(libgcj,Java編譯器的運行時庫)。--disable-libtool-lock禁止 libtool 鎖定以加快編譯速度(可能會致使並行編譯的失敗)--enable-linux-futex在libgomp和libstdc++庫中使用Linux的futex系統調用(快速用戶空間互斥體)。默認值根據內核頭文件sys/syscall.h中是否包含futex函數的定義而定。--enable-maintainer-mode啓用無用的 make 規則和依賴性(它們有時會致使混淆)。--enable-objc-gc容許在 Objective-C 運行時庫中使用 Boehm 垃圾回收器。當前並不支持Boehm,因此該選項沒有實際意義。--disable-ppl-version-check禁止檢測 PPL(Parma Polyhedra Library)的版本是否知足要求。[GCC-4.4新增選項]--enable-secureplt使編譯器默認建立只讀的 plt 項,至關於未來調用 gcc 時默認使用 -msecure-plt 選項。僅對 powerpc-linux 平臺有意義。--enable-stage1-checking對處於 stage1 狀態的編譯器執行額外的檢查。默認值等於--enable-checking選項的值。--enable-stage1-languages在bootstrap時,在 stage1 時使用系統原有的C編譯器編譯更多的語言支持,而不是使用stage1編譯出來的C編譯器來編譯他們。該選項通常僅供編譯器開發者使用。無默認值,可用的取值爲:no, yes, all, ada, c, c++, fortran, java, objc, obj-c++ 。--enable-tls
--disable-tls容許或禁止目標系統支持TLS(線程本地存儲),"gcc"子目錄下沒有默認值,"libgcc libgomp libmudflap libstdc++-v3"子目錄下默認爲"yes"。通常狀況下不須要明確指定,由於 configure 腳本能夠自動檢測。僅在你認爲檢測不正確的狀況下(好比彙編器支持 TLS 但 C 卻不支持或彙編器檢測錯誤)才使用這個選項明確指定。--enable-twoprocessChoose two-process fix methodology(啥意思?)。對於那些不支持雙向pipe的系統,必須使用two-process方法。在 mingw32*,beos* 平臺上默認爲"yes",其它平臺上默認爲"no"。--enable-werror-always無論編譯器是否支持,老是使用-Werror來編譯,也就是將全部編譯器警告看成錯誤看待。--enable-win32-registry=KEY僅對Windows平臺有意義。並且即便在Windows平臺上也能夠忽略該選項。--with-gnu-as
--with-gnu-ld指定編譯器未來使用的是GNU彙編器/鏈接器,默認值爲未指定。若是你實際使用的不是GNU彙編器/鏈接器,指定這個選項會引發混淆;另外一方面若是你實際使用的是GNU彙編器/鏈接器,可是卻沒有指定這個選項,也有可能會形成混淆。此選項僅在 hppa, sparc, sparc64 平臺上纔有意義。--with-bugurl=URL提示用戶發送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 ...'在調試信息中將A映射B,C映射到D...--with-demangler-in-ld嘗試在 GNU ld 中使用 demangler--with-dwarf2指定編譯程序產生的調試信息默認爲DWARF2格式。--with-gc=[page|zone]指定編譯過程當中使用的垃圾回收方案(默認爲"page")。--with-included-gettext使用軟件包中自帶的 GNU gettext 庫。若是你已經使用了Glibc-2.0以上的版本,或者系統中已經安裝了GNU gettext軟件包,那麼就沒有必要使用這個選項。默認不使用。--with-pkgversion=PKG使用"PKG"代替默認的"GCC"做爲版本字符串,這個信息將會在"gcc --version"命令下顯示。好比你能夠在其中嵌入編譯時間或第多少次編譯之類的信息。--with-stabs指定未來編譯器產生的調試信息默認爲stabs格式,而不是宿主系統的默認格式。一般GCC產生的默認調試信息是ECOFF格式,可是它包含的調試信息沒有stabs多。

編譯、測試、安裝

除了使用 CFLAGS,LDFLAGS 以外,還可使用 LIBCFLAGS,LIBCXXFLAGS 控制庫文件(由stage3編譯)的編譯器選項。能夠在 make 命令行上使用 BOOT_CFLAGS,BOOT_LDFLAGS 來控制 stage2,stage3 的編譯。可使用 make bootstrap4 來增長步驟以免 stage1 可能被錯誤編譯所致使的錯誤。可使用 make profiledbootstrap 在編譯stage1時收集一些有用的統計信息,而後使用這些信息編譯最終的二進制文件,這樣能夠提高編譯器和相應庫文件的執行效率。

編譯完畢後可使用"make check"運行測試套件,而後能夠和http://gcc.gnu.org/buildstat.html裏面列出來的結果進行對比,只要"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啓用斷言檢查,主要用於調試目的。--enable-alloca=alloca|malloc-reentrant|malloc-notreentrant分配臨時工做區內存的方法:
alloca - 使用libc或編譯器內置的方法
malloc-reentrant - 在堆上使用可重入的(re-entrant)方法分配
malloc-notreentrant - 在堆上使用全局變量的方法分配
默認值是優先使用alloca,不可用時使用malloc-reentrant。--enable-cxx啓用C++支持(必須同時擁有C++編譯器支持)。也就是將要安裝libgmpxx.la庫和gmpxx.h頭文件。--enable-fat在運行時根據CPU型號選擇相應的底層子程序。這將使得代碼變得臃腫但能夠得到更好的性能。--disable-fft默認狀況下,GMP使用 Karatsuba, 3-way Toom, Fermat FFT 三種算法進行乘法運算。而 Fermat FFT 算法僅用於操做數很是巨大的場合,因此,若是你預計到並不須要操做很是巨大的數字,那麼能夠禁用這個算法,這樣能夠減少一些二進制文件的體積。--enable-mpbsd編譯與Berkeley MP接口兼容的庫文件(libmp.{so,a})和頭文件(mp.h)--enable-nails=偶數在limbs中使用nail(?何意?)--enable-profile啓用 profiling 信息相關的庫文件編譯。主要用於調試目的。--disable-shared
--disable-static禁止編譯共享或靜態版本的庫。--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 < patches
命令打補丁。

下面所列選項若未特別說明皆爲非默認值。而且僅選擇有實際意義的選項介紹:

--enable-assert啓用斷言檢查,主要用於調試目的。--enable-decimal-float編譯與十進制浮點數之間的轉換函數(要求GCC>=4.2)--enable-logging啓用MPFR日誌(必需要有底層操做系統的支持)--disable-shared --disable-static禁止編譯共享或靜態版本的庫。--enable-tests-timeout=NUM設定測試程序的超時秒數(NUM<=9999),默認沒有超時限制。--enable-thread-safe編譯線程安全的MPFR庫--enable-warnings容許MPFR將錯誤輸出到stderr--with-gmp=GMPDIR --with-gmp-include=GMPINCDIR --with-gmp-lib=GMPLIBDIR指定 GMP 庫的安裝目錄/頭文件目錄/庫目錄。指定GMPDIR至關於同時指定了:GMPINCDIR=GMPDIR/include,GMPLIBDIR=GMPDIR/lib 。--with-mulhigh_size=NUMmulhigh的內置閾值表大小,沒有默認值。--with-pic --without-pic試圖僅使用 PIC 或 non-PIC 對象,默認二者都使用。
相關文章
相關標籤/搜索