链接脚本简介
以下內容源于朱有鵬《物聯網大講堂》課程,如有侵權,請告知刪除。
1、程序段的概念:代碼段(.text)、數據段(.data)、bss段(ZI段)、自定義段
(1)段是指程序的某部分。
- 把整個程序分成許多段,給每個段起一個名字,在鏈接時用這個名字來指示這些段。
- 給段命名,就是為了在鏈接腳本中,讓段站在合適的位置。
(2)段名分為2種:一種是編譯器鏈接器內部定好的,先天性的名字;一種是程序員自己指定的、自定義的段名。
- 先天性段名:
代碼段:(.text) ?,又叫文本段,代碼段其實就是函數編譯后生成的東西;
數據段:(.data),數據段就是C語言中有顯式初始化為非0的全局變量;
bss 段:(.bss) ,又叫ZI(zero initial)段,即零初始化段,對應C語言中初始化為0(或者沒有顯式初始化)的全局變量。
- 后天性段名:
(3)C語言中全局變量如果未顯式初始化,值是0。
- 本質就是C語言把這類全局變量放在了bss段,從而保證了為0;
(4)如何保證顯式初始化為非0的全局變量的值在main之前就被賦值了?
- 這類變量放在.data段中,而.data段會在main執行之前被處理(初始化)。
2、鏈接腳本的作用
(1)鏈接腳本是一個規則文件,用來指揮鏈接器工作。
- 鏈接器會參考鏈接腳本,使用其中的規則來處理.o文件中那些段(一般情況下,每個.o文件會包含若干個段,而不是只有某個段),將其鏈接成一個可執行程序。
(2)鏈接腳本的關鍵內容有2部分:段名 + 地址(作為鏈接地址的內存地址)
(3)鏈接腳本的理解:
SECTIONS {} ? ? ??這個是整個鏈接腳本
. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?點號在鏈接腳本中代表當前位置
= ? ? ? ? ? ? ? ? ? ? ? ? ? ? 等號代表賦值
(4)舉例如下(代碼的內容是鏈接到以0xd0024000開始的空間。)
SECTIONS {. = 0xd0024000;//地址.text : {//段名start.o* (.text)}.data : {* (.data)}bss_start = .; .bss : {* (.bss)}bss_end = .; }
總結
- 上一篇: 计算机生存代码,方舟生存进化OL代码大全
- 下一篇: abaqus如何并行计算_Abaqus软