2015-03-02 47 views
0

我有一些關於構建GCC的構建過程的問題,我希望有人能向我解釋。有關構建GCC的必要步驟的問題

  1. 爲什麼要取消設置C_INLCUDE_PATH CPLUS_INCLUDE_PATH LD_LIBRARY_PATH LIBRARY_PATH
  2. 爲什麼GCC需要MPFRMPCGMP建?如果以後安裝舊版本(與download_prerequisites一起下載),然後安裝較新的版本,那麼編譯後的程序將使用哪些版本?

回答

1

爲什麼GCC需要MPFR,MPC和GMP來構建?

我可以回答這個部分。 MPFR和MPC是在編譯時應用浮點操作所必需的。理論上MPFR可以用來分析源代碼中的十進制常量(GCC開發者已經多次說過,由於他們現在依賴於MPFR,所以他們不妨使用它,但據我所知,GCC的十進制到浮點轉換依然依賴於他們自己的代碼real.c)。使用MPFR還允許在沒有浮點(或具有與目標體系結構不同特性的浮點)機器上託管的交叉編譯器。

GMP只是其他兩個的依賴。它使用的不是這樣,對MPFR的依賴是相對最近的變化(比如說幾年)。


如果(如下載與download_prerequisites)舊版本,然後更新版本後安裝,這將是一個編譯的程序中使用?

GMP,MPFR,MPC庫僅在編譯時使用。任何已經編譯過的程序都是用當時編譯器使用的這些庫的版本編譯的。如果之後更新庫,它不會從編譯程序的角度改變任何內容。


雖然我在這裏,我想我可以解釋一下其他的事情還有:

爲什麼要取消設置C_INLCUDE_PATH CPLUS_INCLUDE_PATH LD_LIBRARY_PATH LIBRARY_PATH

由於在生成過程使用這些變量是爲了自己的目的,如果你設置它們,它會弄亂它。

+0

我想我可能已經寫下了關於'download_prerequisites'的問題。我的意思是,如果GCC是用這些程序的舊版本構建的。但是當GCC編譯一個程序(例如'a.out')時,系統上安裝了更新的版本;將使用系統上安裝的新版本構建'a.out'? – 2015-03-03 09:31:13

+0

@chewsocks未公開的系統上的二進制檢測工具(即Mac OS X上的「otool」)會告訴您這些庫是否與編譯器二進制文件動態鏈接。這肯定取決於正在使用的主機系統。請注意,'gcc'可能不是編譯器二進制文件,而是所謂的「編譯驅動程序」。 – 2015-03-03 09:36:45

+0

@chewsocks因爲主機上的atof可能質量很差(從十進制到浮點的轉換比看起來更難)。 GCC想在其文檔中說浮點常量四捨五入到最接近的可表示數字,而不是它們四捨五入到最接近的可表示數字,除非您在平臺X和Y上使用它。 – 2015-03-08 10:25:52