Linux

LFS:什麼是工具鏈,為什麼它很重要?

  • August 7, 2016

我正在從頭開始瀏覽 Linux,並且在討論工具鏈的頁面上。到目前為止,我已經理解了一切,但我不理解“工具鏈”這個術語。

根據我的閱讀,工具鍊是一組用於在新發行版上編譯工具的工具。這是必需的,以便不使用主機編譯器編譯軟體。

我是否認為必須使用主機工具(我相信這是現階段正在建構的編譯器)來編譯 Glibc、Binutils 等?然後一旦完成,新編譯的編譯器將用於建構其他工具來創建作業系統?

這部分非常粗略,Google搜尋並沒有產生可能有用的結果。如果有人有任何有用的資源可以分享,這將幫助我更好地理解這一點,那就太好了。

工具鏈只是建構軟體的工具(編譯器、彙編器、連結器、庫和一些有用的實用程序)。

在這種情況下,重要的部分是獨立於主機的——即獨立於下載的工具。

您可能需要重建工具的原因有幾個:

  • 潛入後門更難(儘管並非不可能)
  • 可以調整編譯參數以適應您的系統,而不僅僅是一般的二進製文件。
  • 您將獲得最新版本的工具。

LFS 對工具鏈(即編譯器、連結器、彙編器以及它們所使用的庫)進行了 3 次重建:

  • 第一次使用宿主系統的工具鏈在目標系統上建構一個新的工具鏈(gccldbinutilsglibc等)。這些工具將連結到主機系統上的共享庫,如果您此時引導到目標系統,這些庫將不存在。所以…
  • 第二次針對安裝在目標機器上的庫建構工具鏈。這意味著如果您啟動到目標系統,工具鏈將起作用,但仍有一些可能與主機系統相關聯,並且無論工具鍊是否仍然針對主機系統而不是目標系統進行了優化編譯。所以…
  • 第三次是魅力,這一次工具鏈將完全“清理”到您的主機系統的任何連結或附件,並針對您的目標系統進行優化。

這可能是建構 LFS 系統中最重要的一個部分,並且密切關注這些說明非常重要。在我建構的所有 LFS 系統中(迄今為止有四個),這是我遇到問題的一個部分。有時這些問題直到很久以後才出現,您可以想像這非常令人沮喪。

引用自:https://unix.stackexchange.com/questions/301865