freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第3章程序設(shè)計基礎(chǔ)-在線瀏覽

2024-08-30 11:01本頁面
  

【正文】 RUN_CACHE 值為0: armelfgcc –c –D RUN_CACHE=0 交叉連接器 armelfld 概述 armelfld根據(jù)鏈接定位文件 Linkcmds中代碼段、數(shù)據(jù)段、 BSS段和堆棧段等定位信息,將可重定位的目標(biāo)模塊鏈接成一個單一的、絕對定位的目標(biāo)程序,該目標(biāo)程序是ELF格式,并且可以包含調(diào)試信息。 armelfld支持將多個目標(biāo)模塊鏈接成一個單一的、絕對定位的目標(biāo)程序,也能夠依次對目標(biāo)模塊進行鏈接,這個特性稱為 增量鏈接( Incremental Linking)。 1.命令格式 armelfld [option] file… 命令行后跟選項和可重定位的目標(biāo)文件名。默認(rèn)入口地址的指定方式和其他指定方式的描述,參見 。 例如: 鏈接的輸入文件為 ,輸出文件為,在標(biāo)準(zhǔn)端口打印出符號映象表和內(nèi)存分布信息,命令如下: armelfld –M –o 如果標(biāo)準(zhǔn)輸出設(shè)置為顯示器,運行命令后將在顯示器上顯示內(nèi)存映象信息和符號映象表。 例如 : 鏈接的輸入文件為 ,輸出文件為 ,將鏈接的符號映象表和內(nèi)存分布信息輸出到文件 ,命令如下: armelfld –Map –o 3.指定鏈接的庫 lar ? 指定庫文件 。 例如 : 鏈接的輸入文件為 ,指定 鏈接的庫,輸出文件為 ,命令如下: armelfld –o –lxxx 注意:庫的命名規(guī)則為 ,在 l指定庫名時使用的格式為 lxxx。 ? 搜索順序按照命令行中輸入的順序,并且優(yōu)先于默認(rèn)的搜索路徑。 例如 :鏈接的輸入文件為 ,輸出文件為 ,將 /lib添加到庫的搜索路徑,命令如下: armelfld L./lib –o 5.設(shè)置輸出文件的名字 o output 將輸出文件名字設(shè)定為 output。 例如 : 鏈接的輸入文件為 ,輸出文件為 ,命令如下: armelfld –o linkcmds連接命令文件 armelfld的命令語言是一種描述性的腳本語言,它主要應(yīng)用于控制 :有哪些輸入文件、文件的格式怎樣、輸出文件中的模塊怎樣布局、分段的地址空間怎樣分布、以及未初始化的數(shù)據(jù)段怎樣處理等。 1.調(diào)用 linkcmds 首先寫一個鏈接命令文件 linkcmds,然后在 armelfld的命令中使用 T linkcmds參數(shù) ,就能在鏈接時自動調(diào)用 linkcmds文件. 例如 : 鏈接的輸入文件為 ,輸出文件為 ,鏈接定位文件為 linkcmds,則命令如下 : armelfld –T linkcmds –o 2.編寫 linkcmds (1)armelfld命令語言 armelfld命令語言是一系列語句的集合,包括用簡單的關(guān)鍵字設(shè)定選項、描述輸入文件及其格式、命名輸出文件。SECTIONS語句用于描述輸出文件中的模塊怎樣布局, MEMORY語句描述目標(biāo)機中可以用的存儲單元。 ② 變量名 ? 以字母、下劃線和點開頭,可以包含任何字母、下劃線、數(shù)字、點和連接符。 ③ 地址記數(shù)器點號“ . ‖ ? ―.‖是一個包含當(dāng)前輸出地址的計數(shù)器。 ? “ .‖可以在任何一般符號出現(xiàn)的地方出現(xiàn),對“ .‖的賦值將引起計數(shù)器所指位置的移動,而計數(shù)器位置不能反向移動。 可以將“ .‖賦給變量 。 例如: data_start = . ; .= . + 2022; ( 3) linkcmds的結(jié)構(gòu) linkcmds文件主要由四個部分 組成 : 1. 程序入口說明:用于指定程序運行時所需要執(zhí)行的第一條指令的地址。 3. 內(nèi)存布局的說明:用于規(guī)劃內(nèi)存的布局,將內(nèi)存空間劃分為不同的部分。 其中①和④的部分不能被省略。 該命令格式如下: ENTRY( symbol) 其中 ENTRY是保留字, symbol表示程序的入口地址,通常是用一個全局地址標(biāo)號( label)來表示入口地址。 該命令可以作為單獨的一條命令放在 linkc–mds的任何位置,也可以放在 SECTIONS內(nèi)關(guān)于段的定義部分,都對布局起作用。 在默認(rèn)情況下, armelfld可以自己生成一個程序頭,用戶也可以用 PHDRS自己編寫程序頭,當(dāng)運用該命令時, armelfld不會生成默認(rèn)的程序頭。 PHDRS { name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ] [ FLAGS( flags) ] ; } 其中 PHDRS、 FILEHDR、 AT、 FLAGS都是關(guān)鍵字。 type表示段的類型,可以為下面描述的任意一種類型(括號內(nèi)表示關(guān)鍵字的值): ? PT_NULL (0) ——空程序頭 ? PT_LOAD (1) ——描述一個可裝入的段 ? PT_DYNAMIC (2)——表示包含動態(tài)鏈接信息的段 ? PT_INTERP (3) ——表示該段包含程序解釋器的名字 ? PT_NOTE (4) ——表示包含注釋信息的段 ? PT_SHLIB (5) ——一個保留的程序頭 ? PT_PHDR (6) ——表示該段可能包含程序頭的描述信息 ? expression ——用數(shù)值表示一個程序頭的類型,該類型沒有對應(yīng)的關(guān)鍵字 FILEHDR表示在段中包含 ELF文件頭的信息。 [AT (address)]表示該段的起始地址,若在SECTIONS中也有 AT時,程序頭中定義的 AT優(yōu)先。 interp PT_INTERP 。 data PT_LOAD 。 } SECTIONS { . = SIZEOF_HEADERS。 /* move to a new page in memory */ .data : { *(.data) } :data .dynamic : { *(.dynamic) } :data :dynamic ... } 在上面的例子中,定義了 5個段: ? headers申明一個程序頭段; ? interp申明一個段,段中包含了程序解釋器的名字; ? text申明一個可被下載的段,并且包含了文件的頭信息和各段的信息; ? data申明一個可被下載的段; ? dynamic申明一個包含動態(tài)鏈接信息的段; 在 SECTIONS中可以看到,有的分段同時屬于兩個段,實質(zhì)上是這兩個段占用同一空間。 注意:如果沒有特殊要求,建議用戶不要自己寫程序頭。 用戶也可以用 MEMORY命令對內(nèi)存進行配置。 定義內(nèi)存段的方式: MEMORY { name (attr) :ORIGIN = origin, LENGTH = len … } ?name表示內(nèi)存段的名字,可以使用任何變量名,但是不能和已有變量名、文件名和分段名( section name)沖突。 ?origin(可簡寫為: 或者 o)表示內(nèi)存段的起始位置。 ( 7)對分段的說明 SECTIONS命令控制如何正確地 將輸入分段定位到輸出分段 ,包括在輸出文件中的順序 ,和輸入分段在輸出分段中的定位。 SECTIONS命令的格式: SECTIONS{ ... seame start BLOCK(align) (NOLOAD) : AT ( ldadr ) { contents } region :phdr =fill ... } 其中 seame和 contents都是必須有的。 start, BLOCK( align) ,( NOLOAD) ,AT( ldadr) , region, :phdr, =fill都是可選項: Start 表示分段的起始地址 ,該地址被稱為重定位地址 。 contents表示具體的分段內(nèi)容,主要描述該輸出分段中包含有輸入文件中的哪些分段。 在 C語言文件編譯成目標(biāo)文件后 ,通常包含有 .text、 .data、 COMMON、 .rodata段。 contents可用格式: ?filename ?filename( section) ?filename( section, section, … ) ?filename( section section … ) 和針對所有文件的: ?*( section) ?*( section, section, … ) ?*( section section … ) 如果在用“ *”指定所有文件時,以前已經(jīng)使用 filename指定過一些文件,那么“ *”表示剩下的文件: filename( COMMON) *( COMMON) 指定輸入文件中名為 COMMON的分段里未初始化的數(shù)據(jù)在輸出分段中的位置。 下面舉例說明 contents中的具體內(nèi)容及編寫方法。 例如: .text 0 : { *(.text)。 例如: .text 0 : { (.text)。 (.text)。 例如: text1 : { (.text)。 } 表示將 .text段放在輸出文件的 text1段中,而其他輸入文件的 .text段都放在輸出文件的 text2段。 例如: /* ments */ 工程管理器 MAKE 概述 make是用于自動編譯、鏈接程序的實用工具。 要使用 make,首先要編寫 makefile ,makefile描述程序文件之間的依賴關(guān)系以及提供更新文件的命令。 如果 makefile文件存在,每次修改完源程序后,用戶通常所需要做的事情就是在命令行敲入“ make‖,然后所有的事情都由make來完成。 例如 :makefile的名字是 my_hello_make: make –f my_hello_make 2.命令選項列表 ? f 指定 makefile ? e 使環(huán)境變量優(yōu)先于 makefile的變量 ? I dir 設(shè)定搜索目錄 ? i 忽略 make過程中所有錯誤 ? n 只顯示執(zhí)行過程,而不真正執(zhí)行 ? r 使隱含規(guī)則無效 ? w 顯示工作目錄 ? C dir 讀取 makefile設(shè)置的工作目錄 ? s 不顯示執(zhí)行的命令 命令使用 makefile文件用來告訴 make需要做的事情,通常指怎樣編譯、怎樣鏈接一個程序。 ? 而每個目標(biāo)文件都與 C的源代碼文件有關(guān),如果有源代碼文件被修改過,則所有目標(biāo)文件都必須被重新鏈接生成最后的結(jié)果。 1.指定 makefile f makefile ? 用該選項指定 makefile的名字為makefile。 ? 如果不指定 makefile, make默認(rèn)的makefile依次為“ makefile‖、“ Makefile‖。 例如: make –e 3.指定包含文件的搜索路徑 I dir ? 指定在解析 makefile文件中的 .include時的搜索路徑為 dir。 例如: make –I/include/mk 4.忽略錯誤 i 忽略 make執(zhí)行過程中的所有錯誤。 例如: make –n 6.使隱含規(guī)則無效 r 使 make的隱含規(guī)則無效,清除后綴名規(guī)則中默認(rèn)的后綴清單。 例如: make –w 8.讀取 makefile文件前設(shè)置工作目錄 C dir ? 在讀取 makefile文件以前將工作目錄改變?yōu)?dir,完成 make后改回原來的目錄。 ? “ C dir0 / C dir1 ‖與“ C dir0 / dir1‖等價 . 例如: make –C bsp 9.不顯示所執(zhí)行的命令 s 運行 make時用選項 s可以不顯示執(zhí)行的命令,只顯示生成的結(jié)果文件。 ? dependency 描述產(chǎn)生 target所需的文件,一個 target通常依賴于多個 dependency。 注意: mand必須以 TAB鍵開頭。 例如: smcinit: armelfar –ruvs –o : armelfgcc –c –o : armelfgcc –c –o clean: rm *.o ? 表示目標(biāo)名的有 smcinit、 、 。 ? clean為一動作名,刪除所有后綴為 .o的文件。在上面的例子中, make默認(rèn)執(zhí)行的是規(guī)則smcinit,此時只需要輸入命令: make make將讀入 makefile,然后執(zhí)行第一條規(guī)則,例子中該規(guī)則是鏈接目標(biāo)文件生成庫,因此必須執(zhí)行規(guī)則smc
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1