007 鏈結器命令指令碼LD檔案教程(1)

2022-08-16 20:27:07 字數 654 閱讀 8645

開發人員如何指定乙個二進位制映象檔案的內部布局呢?可以傳遞給鏈結器乙個鏈結描述檔案,也成為鏈結器命令指令碼。可以將這個特殊的檔案看做乙份構造二進位制可執行映象的「配方」。下面**中顯示了u-boot引導引導程式使用的鏈結器描述檔案的部分內容。

該指令碼從這裡開始定義了二進位制elf映象的輸出段。它指示鏈結器將名為.resetvec的**段放置在資料映象的固定位址處,即位址0xfffffffc。此外,它還指定這個段的剩餘部分全部填充為1(0xffff)。這是因為乙個快閃儲存器的儲存陣列在被擦除後內容全部是1。這個技術不僅降低了快閃儲存器的耗損,同時也顯著提高了將資料寫入快閃儲存器相應扇區的速度。

下圖顯示定義.resetvec**段的彙編檔案內容,它來自最新b-boot發行版,位於….arch\powerpc\cpu\ppc4xx\resetvec.s的彙編檔案中。注意,在乙個只有32位位址的機器中,這段**的長度不能超過4 b。這是因為,不論配置選項(檔案中的巨集)取值如何,這段**都只定義了1條指令。

這個檔案會生成一條無條件跳轉指令(branch,在power架構的編譯器語法中表示為b),這條簡單的跳轉指令會被放置到輸出映象的快閃儲存器絕對位址0xfffffffc處。如405gp處理器會從這個固定的位址處獲取其第一條指令。

ld命令和鏈結庫

ld命令和鏈結庫 1 靜態連線庫的名稱是有約定的,也就是必須的 以lib開頭,以 a 作為副檔名。所以不可能有名為my.a的靜態庫。如 你的庫可以起名為 libmy.a so 應該是動態連線庫 2 新增靜態連線庫 如果,你生成的libmy.a在 usr local lib裡面 gcc o myexe...

鏈結器指令碼

鏈結器指令碼構成 段 起始鏈結位址 對齊 變數 段首檔案 乙個可執行程式通常由 段,資料段,bss段構成。其中資料段存放的是初始化後的前期變數 bss段存放的是沒有初始化的前期變數 乙個鏈結器指令碼led.lds例子 output arch arm 指定輸出檔案的平台體系是arm entry sta...

鏈結器指令碼

參考 程式設計師的自我修養 鏈結 裝載與庫 什麼是鏈結指令碼?鏈結指令碼就是程式鏈結時的參考檔案,其主要目的是描述如何把輸入檔案中的段 section 對映到輸出檔案中,並控制輸出檔案的儲存布局。鏈結指令碼的基本命令式sections命令,乙個sections命令內部包含乙個或多個段,段 secti...