《LinuxFromScratch》第三部分:構建LFS系統第六章:安裝基本的系統軟體-6.13.Binutils-2.25

行者武松發表於2017-11-08

             Binutils 軟體包包含一個連結器、一個彙編器、以及其它處理目標檔案的工具。

大概編譯時間:
2.2 SBU
需要磁碟空間:
473 MB

6.13.1. 安裝 Binutils

通過一個簡單測試驗證在 chroot 環境下 PTY 工作正常:

expect -c "spawn ls"

這個命令應該輸出以下內容:

spawn ls

假如輸出包括下面的資訊,那麼表示沒有為 PTY 操作設定好環境。在執行 Binutils 和 GCC 的測試套件之前需要解決這個問題:

The system has no more ptys.
Ask your system administrator to create more.

Binutils 的文件建議在原始檔目錄之外一個專用的編譯目錄編譯 Binutils:

mkdir -v ../binutils-build
cd ../binutils-build

準備編譯 Binutils:

../binutils-2.25/configure --prefix=/usr   
                           --enable-shared 
                           --disable-werror

編譯軟體包:

make tooldir=/usr

make 引數的含義:

tooldir=/usr

一般來說,tooldir (最終存放可執行檔案的目錄) 設定為
$(exec_prefix)/$(target_alias)。例如,x86_64 機器會把它擴充套件為/usr/x86_64-unknown-linux-gnu。因為這是個自定製的系統,並不需要 /usr
中的特定目標目錄。如果系統用於交叉編譯(例如,在 Intel 機器上編譯能生成在 PowerPC 機器上執行的程式碼的軟體包)會使用
$(exec_prefix)/$(target_alias)

[Important]

重要

本章節中的 Binutils 測試套件至關重要,任何情況下都不能跳過。

檢視結果:

make -k check

安裝軟體包:

make tooldir=/usr install

6.13.2.Binutils 內容

安裝的程式:
addr2line, ar, as, c++filt, elfedit,
gprof, ld, ld.bfd, nm, objcopy, objdump, ranlib, readelf, size,
strings, 和 strip
安裝的庫:
libbfd.{a,so} 和
libopcodes.{a,so}
安裝目錄:
/usr/lib/ldscripts

簡要介紹

addr2line

轉換程式地址為檔名稱和行號;給定一個地址和可執行檔案的名稱,它使用可執行檔案中的除錯資訊來判斷與該地址關聯的原始檔以及行號。

ar

建立、更改以及抽取歸檔檔案。

as

一個將 gcc 的輸出彙編到目標檔案的彙編器。

c++filt

連結器用來過濾 C++ 和 Java 符號以及防止過載函式衝突。

elfedit

更新 ELF 檔案的 ELF 檔案頭

gprof

顯示呼叫關係圖配置資料

ld

一個將多個目標檔案和歸檔檔案合併為單一檔案,重定位資料及繫結符號引用的連結器。

ld.bfd

ld 的硬連結。

nm

列出指定目標檔案中出現的符號

objcopy

轉換某種型別的目標檔案到另一種型別

objdump

顯示給定目標檔案的資訊,用選項可以控制顯示特定資訊;顯示的資訊對於使用編譯工具的程式設計師非常有用。

ranlib

生成歸檔檔案內容的索引並儲存到歸檔檔案;索引列出了所有歸檔檔案成員——可重定位的目標檔案定義的符號。

readelf

顯示 ELF 型別的二進位制檔案的資訊

size

列出所給目標檔案各部分大小和總的大小

strings

對每個給定檔案,輸出不低於指定長度(預設是4)的可列印字元序列;對於目標檔案,它預設只列印初始化和引導部分的字串,而對於其它型別的檔案掃描整個檔案。

strip

從目標檔案中去除符號

libbfd

二進位制檔案描述庫

libopcodes

用於處理操作碼—處理器指令的“可讀文字”版本
的庫;用於構建類似 objdump
的工具。


相關文章