




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ld 中文使用手冊完全版中文使用手冊完全版(譯譯)-1、概述、概述.42、命令行選項、命令行選項.52.1、連接器提供大量的命令行選項、連接器提供大量的命令行選項,.52.2、連接腳本、連接腳本.52.3、對于名稱是單個字符的選項對于名稱是單個字符的選項,.52.4、對于名稱是多個字符的選項、對于名稱是多個字符的選項,選項前可以有一個或兩個破折號選項前可以有一個或兩個破折號;.52.5、多字符選項的參數(shù)多字符選項的參數(shù).52.5、注意、注意,如果連接器通過,被編譯器驅(qū)動來間接引用如果連接器通過,被編譯器驅(qū)動來間接引用(比如比如GCC),.62.5.1、下面是關(guān)于被、下面是關(guān)于被 GNU 連接器
2、接受的常用命令行開關(guān)的一個列表連接器接受的常用命令行開關(guān)的一個列表: .6-aKEYWORD.6-AARCHITECTURE -architecture=ARCHITECTURE.6-b INPUT-formAT -format=INPUT-formAT.6-d -dc -dp.6-e ENTRY -entry=ENTRY.6-E -export-dynamic.7-EB連接 big-endian 對象. 這會影響缺省輸出格式.7-EL連接 little-endian 對象. 這會影響缺省輸出格式.7-g忽略. 為了跟其它工具兼容而提供.7-i執(zhí)行一個增量連接(跟-r等同).7-init NA
3、ME.7-lARCHIVE -library=ARCHIVE.7-M -print-map.7-n -nmagic,.7-N -omagic .7-no-omagic .7-o OUTPUT -output=OUTPUT .7-O LEVEL.7-q -emit-relocs .8-r -relocateable.8-R FILENAME -just-symbols=FILENAME.8-s -strip-all,忽略輸出文件中所有的符號信息. .8-S -strip-debug, .8-t -trace,打印 ld 處理的所有輸入文件的名字.8-T SCRIPTFILE -script=SC
4、RIPTFILE.8-u SYMBOL -undefined=SYMBOL.8-Ur.8-unique=SECTION .9-v-version -V,.9-x-discard-all 刪除所有的本地符號.9-X-discard-locals.9-y SYMBOL-trace-symbol=SYMBOL.9-Y PATH.9-z KEYWORD.9-( ARCHIVES -)-start-group ARCHIVES -end-group.9-accept-unknown-input-arch-no-accept-unknown-input-arch .10-assert KEYWORD這個選
5、項被忽略,只是用來跟 SunOS 保持兼容.10-Bdynamic-dy-call_shared連接動態(tài)鏈接庫.10-Bgroup.10-no-undefined.10-Bstatic-dn -non_shared -static.10-Bsymbolic.10-check-sections-no-check-sections.10-cref.10-no-define-common.10-defsym SYMBOL=EXPRESSION.10-demangle=style-no-demangle.11-dynamic-linker FILE.11-embedded-relocs.11-fata
6、l-warnings把所有的警告視為錯誤.11-force-exe-suffix確保輸出文件有一個.exe 后綴.11-no-gc-sections-gc-sections.11-help在標準輸出上打印一個命令行選項概要,然后退出.11-target-help .11-Map MAPFILE.11-no-keep-memory.11-no-undefined-z defs .11-allow-multiple-definition-z muldefs.11-allow-shlib-undefined-no-allow-shlib-undefined.12-no-undefined-versi
7、on.12-no-warn-mismatch.12-no-whole-archive.12-noinhibit-exec.12-nostdlib.12-oformat OUTPUT-formAT .12-qmagic這個選項被忽略,只是為了跟 Linux 保持兼容.12-Qy這個選項被忽略,只是為了跟 SVR4 保持兼容. .12-relax.12-retain-symbols-file FILENAME.12-retain-symbols-file .13-rpath DIR.13-rpath-link DIR.13-shared-Bshareable.13-sort-common.13-s
8、plit-by-file SIZE.14-split-by-reloc COUNT .14-stats .14-traditional-format.14-trafitinal-format開關(guān)告訴 ld 不要把相同的入口合并起來.14-section-start SECTIONNAME=ORG .14-Tbss ORG-Tdata ORG -Ttext ORG.14-dll-verbose-verbose .14-version-script=VERSION-SCRIPTFILE.14-warn-common.14-warn-constructors.15-warn-multiple-gp.
9、15-warn-once.15-warn-section-align .15-whole-archive.15-wrap SYMBOL.16-enable-new-dtags-disable-new-dtags.16i386 PE 平臺的特定選項平臺的特定選項.16-add-stdcall-alias.16-base-file FILE.16-enable-stdcall-fixup-disable-stdcall-fixup .16-export-all-symbols.173、環(huán)境變量、環(huán)境變量.17GNUTARGET.17LDEMULATION.174、連接腳本、連接腳本.174.1、基
10、本的連接腳本的概念、基本的連接腳本的概念.174.2、連接腳本的格式、連接腳本的格式.184.3、簡單的連接腳本示例、簡單的連接腳本示例.184.4、簡單的連接腳本命令、簡單的連接腳本命令.194.4.1、設置入口點、設置入口點.194.4.2、處理文件的命令、處理文件的命令.19INCLUDE FILENAME.19INPUT(FILE, FILE, .)INPUT(FILE FILE .).19GROUP(FILE, FILE, .)GROUP(FILE FILE .).20OUTPUT(FILENAME).20SEARCH_DIR(PATH).20STARTUP(FILENAME).20
11、4.5、處理目標文件格式的命令、處理目標文件格式的命令.20OUTPUT_formAT(BFDNAME) OUTPUT_formAT(DEFAULT, BIG, LITTLE).20TARGET(BFDNAME) .204.6、其它的連接腳本命令、其它的連接腳本命令.21ASSERT(EXP, MESSAGE) .21EXTERN(SYMBOL SYMBOL .).21FORCE_COMMON_ALLOCATION .21INHIBIT_COMMON_ALLOCATION .21NOCROSSREFS(SECTION SECTION .).21OUTPUT_ARCH(BFDARCH) .214
12、.6、為符號賦值、為符號賦值.214.7、SECTIONS 命令命令.224.7.1、輸出節(jié)描述、輸出節(jié)描述.234.7.2、輸出節(jié)名、輸出節(jié)名.234.7.3、輸出節(jié)描述、輸出節(jié)描述.234.7.4、輸入節(jié)描述、輸入節(jié)描述.244.7.4.1、輸入節(jié)通配符、輸入節(jié)通配符.254.7.4.2、輸入節(jié)中的普通符號、輸入節(jié)中的普通符號.254.7.4.3、輸入節(jié)和垃圾收集、輸入節(jié)和垃圾收集.264.7.5、輸出節(jié)數(shù)據(jù).264.7.5.1、輸出節(jié)關(guān)鍵字.274.7.5.2、輸出節(jié)的丟棄。、輸出節(jié)的丟棄。.284.7.5.3、輸出節(jié)屬性、輸出節(jié)屬性.284.7.5.4、輸出節(jié)類型.284.7.5.5、
13、輸出節(jié)、輸出節(jié) LMA.294.7.5.6、輸出節(jié)區(qū)域.304.7.5.7、輸出節(jié)、輸出節(jié) Phdr.304.7.5.8、輸出段填充、輸出段填充.304.7.6、覆蓋描述、覆蓋描述.304.8、MEMORY 命令命令.324.9、PHDRS 命令命令 .334.10、VERSION 命令命令.344.11、連接腳本中的表達式、連接腳本中的表達式.364.11.1、常數(shù).364.11.2、符號名.374.11.3、定位計數(shù)器.374.11.4、運算符.384.11.5、求值.394.11.6、表達式的節(jié).394.11.7、內(nèi)建函數(shù).405、隱式連接腳本、隱式連接腳本.416、它如何工作、它如何工
14、作: BFD 概要。概要。.426.1、信息丟失。.421、概述、概述*ld 把一定量的目標文件跟檔案文件連接起來,并重定位它們的數(shù)據(jù),連接符號引用.一般,在編譯一個程序時,最后一步就是運行 ld .ld 能接受連接命令語言文件,這是一種用 AT&T 的連接編輯命令語言的超集寫成的文件,用來在連接的整個過程中提供顯式的,全局的控制.本版本的 ld 使用通用 BFD 庫來操作目標文件.這就允許 ld 讀取,合并,寫入目標文件時,可以使用各種不同的格式,比如,COFF 或a.out。不同的格式可以被連接到一起產(chǎn)生一個有效的目標文件.除了它的靈活性,GNU 連接器比其它連接器更有用的地方在于它提供了
15、診斷信息. 許多連接器在碰到一個錯誤的時候立即放棄執(zhí)行;但 ld 卻能夠繼續(xù)執(zhí)行,以讓你發(fā)現(xiàn)其他的錯誤(或者,在某些情況下,得到一個帶有錯誤的輸出文件)引用*GNU 連接器 ld 能夠處理大量的不同情況,并且跟其他的連接器保持盡可能的兼容.這樣,你就擁有更多的選擇來控制它的行為.2、命令行選項、命令行選項=2.1、連接器提供大量的命令行選項、連接器提供大量的命令行選項,但是,在實際使用中,只有少數(shù)被經(jīng)常使用.比如,ld 的一個經(jīng)常的使用場合是在一個標準的 Unix 系統(tǒng)上連接標準的 Unix 目標文件.在這樣的一個系統(tǒng)上,連接文件hello.o如下: ld -o OUTPUT /lib/crt
16、0.o hello.o -lc這告訴 ld 產(chǎn)生一個叫 OUTPUT 的文件,作為連接文件/lib/crt0.o和hello.o和庫libc.a的結(jié)果.libc.a來自標準的搜索路徑.(參閱下文的關(guān)于-l選項的討論).1)、有些命令行選項可以在命令行的任何位置出現(xiàn).2)、但是,那些帶有文件名的選項,比如-l或者-T,會讓文件在選項出現(xiàn)的位置上被讀取. 3)、對于非文件選項,以帶不同的參數(shù)重復它,不會有進一步的效果,或者覆蓋掉前面的相同項.那些多次出現(xiàn)時具有特殊含義的選項會在下文的描述中指出.4)、無參數(shù)選項,是那些被連接的目標文件和檔案文件.它們可能緊隨命令行選項,或在它們前面,或者跟它們夾雜
17、在一起,但是一個目標文件參數(shù)是不會出現(xiàn)在一個選項跟它的參數(shù)之間的.5)、通常,連接器至少引用一個目標文件,但是你可指定其它形式的二進制輸入文件,這可以通過-l,-R或者腳本命令語言來實現(xiàn).如果沒有任何二進制文件被指定,連接器不會產(chǎn)生任何輸出,并給出信息:缺少輸入文件.2.2、連接腳本、連接腳本如果連接器不能識別目標文件的格式,它會假設這些只是連接腳本.以這種方式指定的腳本增加了連接用的主連接腳本的內(nèi)容(主連接腳本即缺省連接腳本或使用-T指定的腳本). 這個特性可以允許連接器連接一些文件,它們看上去既像目標文件,又像檔案文件,但實際上只是定義了一些符號值,或者使用INPUT或GROUP來載入其它
18、的目標文件.需要注意的是,用這種方式指定一個腳本只是增加了主連接腳本的內(nèi)容;要完全替換掉主連接腳本,需要使用-T.2.3、對于名稱是單個字符的選項對于名稱是單個字符的選項,選項參數(shù)必須緊跟在選項字母后面,中間不留空,或者也可留有一個空格.2.4、對于名稱是多個字符的選項、對于名稱是多個字符的選項,選項前可以有一個或兩個破折號選項前可以有一個或兩個破折號;比如,-trace-symbol和-trace-symbol是等價的. 注意,對于這條規(guī)則有一個例外.那些以小寫字母o開頭的多字符選項前面只能是兩個破折號,這是為了避免跟選項-o混淆. 比如-omagic把輸出文件的名字定為magic,而-om
19、agic在輸出文件中設置 NMAGIC 標志.2.5、多字符選項的參數(shù)多字符選項的參數(shù)必須跟選項名間,以一個等于號分開,或者以一個空格分開.比如:-trace-symbol foo和-trace-symbol=foo是等價的. 多字符選項的名字唯一縮寫符也是可以被接受的.2.5、注意、注意,如果連接器通過,被編譯器驅(qū)動來間接引用如果連接器通過,被編譯器驅(qū)動來間接引用(比如比如 gcc), 那所有的連接器命令行選項前必須加上前綴-Wl(或者能被特定編譯器驅(qū)動接受的其他前綴),就像下面這樣: gcc -Wl,-startgroup foo.o bar.o -Wl,-endgroup這很重要,因為否
20、則的話,編譯器驅(qū)動程序會默認丟掉這些連接選項,產(chǎn)生一個錯誤的連接.2.5.1、下面是關(guān)于被、下面是關(guān)于被 GNU 連接器接受的常用命令行開關(guān)的一個列表連接器接受的常用命令行開關(guān)的一個列表:-aKEYWORD這個選項在 HP/UX 兼容系統(tǒng)上被支持. 參數(shù) KEYWORD 必須是下面字符串中的一個:archive, shared, or default. -aarchive在功能上跟-Bstatic相同,而另外兩個關(guān)鍵字功能上跟-Bdynamic相同. 這個選項可被多次使用.-AARCHITECTURE-architecture=ARCHITECTURE在最近發(fā)行版本的 ld 中,這個選項只在
21、Intel 960 系列架構(gòu)上有用. 在那種 ld 配置中,參數(shù) ARCHITECTURE 確定 960 系列的某一特定架構(gòu),啟用某些安全措施,并修改檔案庫的搜索路徑.將來的 ld 發(fā)行版可能為其它架構(gòu)系列支持相似的功能.-b INPUT-formAT-format=INPUT-formATld 可以被配置為支持多于一種的目標文件.如果你的 ld 以這種方式被配置,你可以使用-b選項為輸入目標文件指定二進制格式. 就算 ld 被配置為支持可選目標格式,你不必經(jīng)常指定這一項,因為 ld 被配置為在每一臺機子上把最常用的格式作為默認輸入格式. INPUT-formAT 是一個字符串,可能在連接一個
22、不常用的二進制格式文件時需要這個參數(shù).你也可使用-b來顯式切換格式(在連接不同格式的目標文件時),方法是在每一組特定格式的目標前使用-b INPUT-formAT.缺省的格式是從環(huán)境變量GNUTARGET中得到的.你也可以從一個腳本中定義輸入格式,使用的命令是TARGET.-c MRI-COMMANDFILE-mri-script=MRI-COMMANDFILE為了跟 MRI 生產(chǎn)的連接器兼容,ld 接受另一種用受限命令語言寫成的腳本文件,通過選項-c引入 MRI 腳本文件;使用-T選項是運行用普通 ld 腳本語言寫的連接腳本.如果 MRI-CMDFILE 不存在,ld 在-L指定的目錄中尋找
23、.-d-dc-dp這三個選項是等價的; 多字符形式是為了跟其他連接器兼容才被支持的.它們給普通符號分配空間,即使一個重定位輸出文件已經(jīng)被指定(通過-r). 腳本命令FORCE_COMMON_ALLOCATION具有同樣的效果.-e ENTRY-entry=ENTRY使用符號 ENTRY 作為你的程序的開始執(zhí)行點,而不是使用缺省的進入點.如果沒有叫做 ENTRY 的符號,連接器會企圖把 ENTRY 作為一個數(shù)字進行分析,并使用它作為入口地址(數(shù)字會被解釋為 10 進制的;你可以使用前導的0 x強制為 16 進制,或0作為 8 進制.)-E-export-dynamic當創(chuàng)建一個動態(tài)連接的可執(zhí)行程
24、序時, 把所有的符號加到動態(tài)符號表中.動態(tài)符號表是一個符號集,這些符號對于運行時的動態(tài)對象是可見的.如果你不使用這個選項,動態(tài)符號表中就會只含有那些連接進來的動態(tài)對象中用到的符號如果你使用dlopen來載入動態(tài)對象,它需要引用程序中的符號,那你可能需要在連接程序時用到這個選項.你也可以使用版本腳本來控制哪些符號應當被加到動態(tài)符號表中.-EB連接 big-endian 對象. 這會影響缺省輸出格式.-EL連接 little-endian 對象. 這會影響缺省輸出格式.-g 忽略. 為了跟其它工具兼容而提供.-i 執(zhí)行一個增量連接(跟-r等同)-init NAME當創(chuàng)建一個 ELF 可執(zhí)行文件或共
25、享對象時,當可執(zhí)行文件或共享對象被加載時,調(diào)用 NAME, 這是通過把 DT_INIT 設置成函數(shù)的地址實現(xiàn)的. 缺省情況下,連接器使用_init作為調(diào)用的函數(shù).-lARCHIVE-library=ARCHIVE增加一個檔案文件 ARCHIVE 到連接的文件列表中.這個選項可以被多次使用. ld 會為每一個指定的 ARCHIVE 搜索它的路徑列表,尋找libARCHIVE.a對于支持共享庫的系統(tǒng), ld 可能還會搜索擴展名不是.a庫.特別的,在 ELF 和 SunOS 系統(tǒng)上,ld 會在搜索帶有.a擴展名的庫前,搜索帶.so擴展名的庫.-M-print-map打印一個連接位圖到標準輸出.一個連
26、接位圖提供的關(guān)于連接的信息有如下一些:* 目標文件和符號被映射到內(nèi)存的哪些地方.* 普通符號如何被分配空間.* 所有被連接進來的檔案文件,還有導致檔案文件被包含進來的那個符號.-n-nmagic,關(guān)閉所有節(jié)的頁對齊,如果可能,把輸出格式標識為NMAGIC.-N-omagic把 text 和 data 節(jié)設置為可讀寫.同時,取消數(shù)據(jù)節(jié)的頁對齊,同時,取消對共享庫的連接.如果輸出格式支持 Unix 風格的 magic number, 把輸出標志為OMAGIC.-no-omagic這個選項執(zhí)行的操作大部分正好跟-N相反.它設置 text 節(jié)只讀,強制 data 節(jié)頁對齊. 但是,這個選項并不開啟連接
27、共享庫的功能. 使用-Bdynamic開啟這個功能.-o OUTPUT-output=OUTPUT使用 OUTPUT 作為 ld 產(chǎn)生的程序的名字;如果這個選項沒有指定,缺省的輸出文件名是a.out.腳本命令OUTPUT也可以被用來指定輸出文件的文件名.-O LEVEL如果 LEVEL 是一個比 0 大的數(shù)值, ld 優(yōu)化輸出.這可能會明顯多占用時間,所以只有在生成最后的文件時使用.-q-emit-relocs把重定位節(jié)和內(nèi)容留在完全連接后的可執(zhí)行文件中. 連接分析和優(yōu)化工具可能需要這些信息用來進行正確的修改與執(zhí)行. 這在大的可執(zhí)行文件中有用.這個選項目前只支持 ELF 平臺.-r-reloc
28、ateable產(chǎn)生可重定位的輸出,比如,產(chǎn)生一個輸出文件,它可再次作為 ld 的輸入。這經(jīng)常被叫做部分連接。作為一個副作用,在支持標準 Unix 魔數(shù)的環(huán)境中,這個選項會把輸出文件的魔數(shù)設置為OMAGIC。如果這個選項沒有被指定,一個絕對文件就會被產(chǎn)生。當連接 C+程序時,這個選項就不會解析構(gòu)造函數(shù)的引用;要解析,必須使用-Ur如果輸入文件跟輸出文件的格式不同,只有在輸入文件不含有重定位信息的時候部分連接才被支持.輸出格式不同的時候會有更多的限制.比如,有些a.out的格式在輸入文件是其他格式的時候完全不支持部分連接。這個選項跟-i等效.-R FILENAME-just-symbols=FIL
29、ENAME從 FILENAME 中讀取符號名跟它們的值,但不重位這個文件,或者根本不把它包含在輸出文件中.這就允許你的輸出文件引用其它程序中定義的絕對內(nèi)存地址.你可以多次使用這個選項.為了跟其他 ELF 連接器兼容,如果-R選項后面跟有一個目錄名,而不是一個文件名,它會被處理成-rpath選項.-s-strip-all,忽略輸出文件中所有的符號信息.-S-strip-debug,忽略輸出文件中所有的調(diào)試符號信息(但不是所有符號).-t-trace,打印 ld 處理的所有輸入文件的名字.-T SCRIPTFILE-script=SCRIPTFILE把 SCRIPTFILE 作為連接腳本使用. 這
30、個腳本會替代 ld 的缺省連接腳本(而不是增加它的內(nèi)容)所以命令文件必須指定所有需要的東西以精確描述輸出文件. 如果 SCRIPTFILE 在當前目錄下不存在,ld 會在-L選項指定的所有目錄下去尋找.多個-T選項會使內(nèi)容累積.-u SYMBOL-undefined=SYMBOL強制 SYMBOL 在輸出文件中作為一個無定義的符號被輸入.這樣做會有一些效果,比如,會引發(fā)從標準庫中連接更多的模塊. -u可以以不同的參數(shù)反復使用,以輸入多個無定義的符號.這個選項跟連接腳本命令中的EXTERN是等效的.-Ur對于不是 C+的程序,這個選項跟-r是等效的: 它產(chǎn)生可重定位的輸出,比如,一個輸出文件它可
31、以再次作為 ld 的輸入. 當連接 C+程序時,-Ur解析構(gòu)造函數(shù)的引用,跟-r不同. 但如果在一些用-Ur連接過的文件上再次使用-Ur,它不會工作,因為一旦構(gòu)造函數(shù)表被建立,它不能被添加內(nèi)容.請只在最后一遍連接的時候使用-Ur, 對其它的,只使用-r.-unique=SECTION對于所有匹配 SECTION 的輸入節(jié),在輸出文件中都各自創(chuàng)建單獨的節(jié),或者,如果可選的通配符 SECTION 參數(shù)丟失了,為每一個孤兒輸入節(jié)創(chuàng)建一個輸出節(jié). 一個孤兒節(jié)是一個連接腳本中沒有指定的節(jié).你可以在命令行上多次使用這個選項; 它阻止對同名輸入節(jié)的合并,在連接腳本中重載輸出節(jié)分配.-v -version-V
32、,顯示 ld 的版本. -V選項同時會列出支持的模擬器.-x -discard-all刪除所有的本地符號.-X -discard-locals刪除所有的臨時本地符號.對于大多數(shù)目標平臺,就是所有的名字以L開頭的本地符號.-y SYMBOL-trace-symbol=SYMBOL打印出所有 SYMBOL 出現(xiàn)的被連接文件的名字. 這個選項可以被多次使用. 在很多系統(tǒng)中,這在預先確定底線時很有必要.當你擁有一個未定義的符號,但不知道這個引用出自哪里的時候,這個選項很有用.-Y PATH為缺省的庫搜索路徑增加一條路徑.這個選項是為了跟 Solaris 兼容.-z KEYWORD能被識別的關(guān)鍵字包括i
33、nitfirst, interpose, loadfltr,nodefaultlib, nodelete, nodlopen, nodump, now, origin,combreloc, nocombreloc and nocopyreloc. 為了跟 Solaris 兼容,所有其它的關(guān)鍵字都被忽略. initfirst標志一個對象,使它在運行時,在所有其他對象之前被初始化. interpose標志一個對象,使它的符號表放在所有其他符號之前,作為主要的執(zhí)行者. loadfltr標志一個對象, 使它的過濾器在運行時立即被處理.nodefaultlib標志一個對象,使在搜索本對象所依賴的庫時,忽
34、略所有缺省庫搜索路徑. nodelete標志一個對象,使它在運行時不會被從內(nèi)存中刪除.nodlopen標志一個對象,使這個對象不可以通過dlopen載入.nodump標志一個對象,使它不能被dldump轉(zhuǎn)儲. now標志一個對象,使它成為非懶惰運行時綁定對象. origin標志一些可能含有$ORIGIN 的對象,defs不允許無定義符號. muldefs允許重定義. comberloc組合多個重定位節(jié),重新排布它們,讓動態(tài)符號可見. nocomberloc使多個重定位節(jié)組合無效. nocopyreloc使重定位拷貝后的結(jié)果無效.-( ARCHIVES -) -start-group ARCHI
35、VES -end-groupARCHIVES 應當是一個關(guān)于檔案文件的列表. 它們可以是顯式的文件名,或者-l選項.這些指定的檔案文件會被多遍搜索,直到?jīng)]有新的無定義引用被創(chuàng)建. 通常,一個檔案文件只會被搜索一次. 但如果這個檔案文件中的一個符號需要被用來解析一個檔案中的目標引用到的無定義的符號,而這個符號在命令行上的后面某個檔案文件中出現(xiàn), 連接器不能解析這個引用. 把這些檔案文件分組后,它們都可被反復搜索直到所有可能的引用都被解析了為止.使用這個選項有一個很大的運行開銷. 只有在無法避免在多個檔案文件中使用循環(huán)引用時才用它.-accept-unknown-input-arch -no-ac
36、cept-unknown-input-arch告訴連接器,接受那些架構(gòu)不能被識別的輸入文件. 但前提是用戶知道他們在做什么,并且是故意要連接這些未知的輸入文件. 在版本 2.14 之前,這個是連接器的缺省行為. 從版本 2.14 以后的,缺省行為是拒絕這類輸入文件, 所以-accept-unknown-input-arch選項被用來恢復舊的行為.-assert KEYWORD這個選項被忽略,只是用來跟 SunOS 保持兼容.-Bdynamic-dy-call_shared連接動態(tài)鏈接庫. 這個僅僅在支持共享庫的平臺上有用.在這些平臺上,這個選項通常是默認行為. 這個選項的不同形式是為了跟不同的
37、系統(tǒng)保持兼容. 你可以在命令行上多次使用這個選項:它影響緊隨其后的-l選項的庫搜索.-Bgroup在動態(tài)節(jié)的DT_FLAGS_1入口上設置DF_1_GROUP標志.這會讓運行時連接器在處理在這個對象和它的相關(guān)部分搜索時只在組中. -no-undefined是隱式的. 這個選項只在支持共享庫的 ELF 平臺上有用.-Bstatic-dn-non_shared-static不連接共享庫. 這個僅僅在支持共享庫的平臺上有用. 這個選項的不同形式是為了跟不同的系統(tǒng)保持兼容. 你可以在命令行上多次使用這個選項:它影響緊隨其后的-l選項的庫搜索.-Bsymbolic當創(chuàng)建一個共享庫時, 把對全局符號的引用
38、綁定到共享庫中的定義(如果有), 通常, 一個連接共享庫的程序重載共享庫中的定義是可能的. 這個選項只在支持共享庫的 ELF 平臺上有用.-check-sections -no-check-sections讓連接器,在節(jié)地址被分配后不要去檢查節(jié)地址是否重疊.通常,連接器會執(zhí)行這種檢查,如果它發(fā)現(xiàn)了任何重疊,它會產(chǎn)生相應的錯誤信息. 連接器知道也允許節(jié)的重疊. 缺省的行為可以使用命令行開關(guān)-check-sections來恢復.-cref輸出一個交叉引用表. 如果一個連接器位圖文件被產(chǎn)生, 交叉引用表被打印到位圖文件. 否則, 它被打印到標準輸出.表的格式相當?shù)暮唵? 所以,如果需要,可以通過一個
39、腳本很輕易地處理它. 符號是以名字被打印輸出,存儲. 對于每一個符號,給出一個文件名列表. 如果符號被定義了, 列出的第一個文件是符號定義的所在. 接下來的文件包含符號的引用.-no-define-common限制對普通符號的地址分配. 腳本命令I(lǐng)NHIBIT_COMMON_ALLOCATION具有同等的效果.它允許從輸出文件的類型選擇中,確定對普通符號的地址分配; 否則, 一個非重定位輸出類型強制為普通符號分配地址. 使用-no-define-common允許那些從共享庫中引用的普通符號只在主程序中被分配地址. 這會消除在共享庫中的無用的副本的空間, 同時,也防止了在有多個指定了搜索路徑的動
40、態(tài)模塊在進行運行時符號解析時引起的混亂.-defsym SYMBOL=EXPRESSION在輸出文件中建立一個全局符號,這個符號擁有一個 EXPRESSION 指定的絕對地址. 你可以多次使用這個選項定義多個符號. EXPRESSION 支持一個受限形式的算術(shù)運算:你可以給出一個十六進制常數(shù)或者一個已存在符號的名字,或者使用+和-來加或減十六進制常數(shù)或符號. 如果你需要更多的表達式,可以考慮在腳本中使用連接器命令語言, 注意在 SYMBOL,=和 EXPRESSION 之間不允許有空格.-demangle=style-no-demangle這些選項,控制是否在錯誤信息和其它的輸出中重組符號名.
41、 當連接器被告知要重組, 它會試圖把符號名以一種可讀的形式的展現(xiàn): 如果符號被以目標文件格式使用,它剝?nèi)デ皩У南聞澗€,并且把 C+形式的符號名轉(zhuǎn)換成用戶可讀的名字. 不同的編譯器有不同的重組形式. 可選的重組形式參數(shù)可以被用來為你的編譯器選擇一個相應的重組形式. 連接器會以缺省形式重組直至環(huán)境變量COLLECT_NO_DEMANGLE被設置. 這些選項可以被用來重載缺省的設置.-dynamic-linker FILE設置動態(tài)連接器的名字. 這個只在產(chǎn)生動態(tài)連接的 ELF 可執(zhí)行文件時有效. 缺省的動態(tài)連接器通常是正確的; 除非你知道你在干什么,不要使用這個選項.-embedded-relocs
42、這個選項只在連接 MIPS 嵌入式 PIC 代碼時有效, 這些代碼必須是由 GNU 的編譯器跟匯編器通過-membedded-pic 選項生成的. 它導致連接器產(chǎn)生一個表,這個表被用來在運行時重定位所有的被靜態(tài)初始化為指針值的數(shù)據(jù). -fatal-warnings 把所有的警告視為錯誤.-force-exe-suffix確保輸出文件有一個.exe 后綴.如果一個被成功完整連接的輸出文件不帶有一個.exe或.dll后綴, 這個選項確保連接器把輸出文件拷貝成帶有.exe后綴的同名文件. 這個選項在使用微軟系統(tǒng)來編譯未經(jīng)修改的 Unix 的 makefile 時很有用, 因為有些版本的 window
43、s 不會運行一個不帶有.exe后綴的映像.-no-gc-sections-gc-sections允許對未使用的輸入節(jié)的碎片收集. 在不支持這個選項的平臺上,被忽略. 這個選項不能跟 -r選項共存也不能被用來進行動態(tài)連接. 缺省行為可以用-no-gc-sections進行恢復.-help在標準輸出上打印一個命令行選項概要,然后退出.-target-help打印一個所有目標平臺相關(guān)的選項的概要,然后退出.-Map MAPFILE打印一個連接位圖到文件 MAPFILE 中. 參閱上面關(guān)于-M選項的描述.-no-keep-memoryld 通常會以速度優(yōu)先于內(nèi)存使用的方式優(yōu)化程序,這是通過把輸入文件的
44、符號表放在內(nèi)存緩沖中實現(xiàn)的,這個選項告訴 ld 以內(nèi)存使用優(yōu)先來優(yōu)化, 盡可能的減小符號表的重讀. 這在 ld 在連接一個大文件時超出內(nèi)存限制時有用.-no-undefined-z defs通常,當創(chuàng)建一個非符號共享庫時, 無定義的符號允許出現(xiàn),并留待運行時連接器去解決. 這個選項關(guān)閉這樣的無定義符號的使用. 開關(guān)-no-allow-shlib-undefined控制共享對象被連接進共享庫時的行為.-allow-multiple-definition-z muldefs通常,當一個符號被定義多次時, 連接器會報告一個致命錯誤. 這些選項允許重定義并且第一個定義被使用-allow-shlib-u
45、ndefined-no-allow-shlib-undefined允許(缺省)或不允許無定義符號存在于共享對象中. 這個開關(guān)的設置會重載-no-undefined,這里只關(guān)注共享對象. 如果-no-undefined被設置,但-no-allow-shlib-undefined未被設置, 連鎖反應是存在于規(guī)則對象文件中的無定義的符號會引起一個錯誤,但是在共享對象中的未定義的符號會被忽略.把-allow-shlib-undefined設置為缺省的原因是,在連接時指定的共享對象并不一定是載入時可載入的那個,所以,符號可能要到載入時間才被解析.-no-undefined-version通常當一個符號有
46、一個未定義的版本時,連接器會忽略它. 這個選項不允許符號有未定義的版本,并且碰到這種情況,會報告一個嚴重錯誤.-no-warn-mismatch通常, 如果你因為一些原因,企圖把一些不匹配的輸入文件連接起來的時候,ld 會給出一個錯誤,可能這些文件是因為由不同的處理器編譯. 這個選項告訴 ld 應當對這樣的錯誤默認允許. 這個選項必須小心使用.-no-whole-archive為后面的檔案文件關(guān)閉-whole-archive選項的影響.-noinhibit-exec當一個可執(zhí)行文件還可以使用時,就保留它. 通常,連接器如果在連接過程中遇到了錯誤,就不會產(chǎn)生輸出文件;當它遇上錯誤時,它會退出而不
47、寫輸出文件.-nostdlib僅搜索那些在命令行上顯式指定的庫路徑. 在連接腳本中(包含在命令行上指定的連接腳本)指定的庫路徑都被忽略.-oformat OUTPUT-formATld 可以被配置為支持多于一種的目標文件. 如果你的 ld 以這種方式被配置,你可以使用-oformat選項來指定輸出目標文件的二進制式.就算 ld 被配置為支持多種目標格式,你也不必指定這個項,因為 ld 應當被配置為把最常用的輸出格式作為默認格式. OUTPUT-formAT 是一個文本串,是被 BFD 庫支持的一個特定格式的名字.腳本命令OUTPUT_formAT也可以指定輸出格式,但這個選項可以覆蓋它.-qm
48、agic這個選項被忽略,只是為了跟 Linux 保持兼容.-Qy這個選項被忽略,只是為了跟 SVR4 保持兼容.-relax一個機器相關(guān)的選項. 只有在少數(shù)平臺上,這個選項被支持. 在某些平臺上,-relax選項在連接器解析程序中的地址時執(zhí)行可能的全局優(yōu)化, 比如松散地址模式和在輸出文件中合成新的指令.在某些平臺上,連接時全局優(yōu)化會進行符號調(diào)試導致程序不能運行.在不支持這個選項的平臺上,-relax被接受,但被忽略.-retain-symbols-file FILENAME只保留在 FILENAME 中列出的那些符號,丟棄所有其他的. FILENAME 是一個簡單地平坦模式文件, 一個符號占一
49、行.這個選項在那些會逐步積累起一個大的全局符號表的系統(tǒng)中(比如 VxWorks)會很有用,它能有效地節(jié)約內(nèi)存空間.-retain-symbols-file不丟棄未定義的符號,和需要重定位的符號.你可能在命令行上只指定-retain-symbol-file一次, 它覆蓋-s和-S的功能.-rpath DIR為運行時庫的搜索路徑增加一個目錄. 這個在連接帶有共享庫的 ELF 可執(zhí)行文件時有用. -rpath的所有參數(shù)會被連接起來傳遞給運行時連接器, 運行時連接器在運行時用它們定位共享對象. -rpath選項在定位那些在連接參數(shù)指定的共享對象需要的共享對象時也很有用; 參閱關(guān)于-rpath-link
50、選項的描述, 如果在連接一個 ELF 可執(zhí)行文件時不使用-rpath選項,那些環(huán)境變量LD_RUN_PATH選項就會被使用.-rptah選項也可以使用在 SunOS 上. 缺省地,在 SunOS 上,連接器會從所有的-L選項中形成一個運行時搜索路徑.如果使用了-rpath選項, 那運行時搜索路徑就只從-rpath選項中得到, 忽略-L選項. 這在使用 GCC 時非常有用, 它會用上很多的-L選項,而這些路徑很可能就是 NFS 掛上去的文件系統(tǒng)中.為了同 ELF 的連接器兼容, 如果-R選面后面跟有一個目錄名, 而不是一個文件名,那它也會被處理成-rpath選項.-rpath-link DIR當
51、在 SunOS 上使用 ELF 時,一個共享庫可能會用到另一個共享庫.當ld -share把一個共享庫作為一個輸入文件連接時就有可能發(fā)生這種情況.當一個連接器在作非共享,不可重定位連接時,如果遇上這種依賴情況,它會自動定位需要的共享庫,然后把它包含在連接中, 如果在這種情況中,它沒有被顯式包含, 那-rpath-link選項指定優(yōu)先搜索的一組路徑名.這個選項必須小心使用,因為它會覆蓋那些可能已經(jīng)被編譯進共享庫中的搜索路徑. 在這種情況下,它就有可能使用一個非內(nèi)部的不同的搜索路徑.連接器使用下面的搜索路徑來定位需要的共享庫:1). 所有由-rpath-link選項指定的搜索路徑.2). 所有由-
52、rpath指定的搜索路徑. -rpath跟-rpath_link的不同之處在于,由-rpath指定的路徑被包含在可執(zhí)行文件中,并在運行時使用, 而-rpath-link選項僅僅在連接時起作用. 它只用于本地連接器.3). 在一個 ELF 系統(tǒng)中, 如果-rpath和rpath-link選項沒有被使用, 會搜索環(huán)境變量LD_RUN_PATH的內(nèi)容.它也只對本地連接器起作用.4). 在 SunOS 上, -rpath選項不使用, 只搜索所有由-L指定的目錄. 5). 對于一個本地連接器,環(huán)境變量LD_LIBRARY_PATH的內(nèi)容被搜索.6). 對于一個本地 ELF 連接器,共享庫中的DT_RUN
53、PATH和DT_RPATH操作符會被需要它的共享庫搜索. 如果DT_RUNPATH存在了, 那DT_RPATH就會被忽略.7). 缺省目錄, 常規(guī)的,如/lib和/usr/lib.8). 對于 ELF 系統(tǒng)上的本地連接器, 如果文件/etc/ld.so.conf存在, 這個文件中有的目錄會被搜索.如果需要的共享庫沒有被找到, 那連接器會發(fā)出一條警告信息,并繼續(xù)執(zhí)行連接.-shared-Bshareable創(chuàng)建一個共享庫. 這個選項只在 ELF, XCOFF 和 SunOS 平臺上有用。 在 SunOS 上,如果-e選項沒有被使用,并在連接中有未定義的符號,連接器會自動創(chuàng)建一個共享庫,-sort
54、-common這個選項告訴 ld 當它把普通符號放到相應的輸出節(jié)中時按大小進行排序。排在最前面的是所有的一字節(jié)符號,然后是所有的二字節(jié),然后是所有的四字節(jié), 然后是其它的。這是為了避免因為對齊約束而在符號間產(chǎn)生的斷裂-split-by-file SIZE跟-split-by-reloc相似,但在 SIZE 達到時,為每一個輸入文件創(chuàng)建一個新的輸出節(jié)。如果沒有給出,SIZE 缺省地設置為 1-split-by-reloc COUNT試圖在輸出文件中創(chuàng)建節(jié)外的節(jié),這樣就沒有單個的輸出節(jié)含有多于 COUNT 個重定位符。這在產(chǎn)生巨大的用于 COFF 格式的實時內(nèi)核的可重定位文件時非常有用;因為 CO
55、FF 不能在一個節(jié)中表示多于 65535 個重定位。 注意,這在不支持專有節(jié)的目標文件格式中會失敗,連接器不會把單個輸入節(jié)分割進行重分配,所以,如果單個輸入節(jié)含有多于 COUNT 個重定位符, 那一個輸出節(jié)會含有同樣多的可重定位符。COUNT 缺省被設為 32768.-stats計算并顯示關(guān)于連接器操作的統(tǒng)計信息, 比如執(zhí)行時間,內(nèi)存占用等.-traditional-format對于某些目標平臺, ld 的輸出會跟某些面有的連接器的輸出有所不同. 這個開關(guān)要求 ld 使用傳統(tǒng)的格式.比如, 在 SunOS 上, ld 會把符號串表中的兩上完全相同的入口合并起來. 這可以把一個帶有調(diào)試信息的輸出
56、文件的大小減小百發(fā)之三十. 不幸地是, SunOS 的dbx程序不能讀取這個輸出的程序(gdb 就沒有問題).-trafitinal-format開關(guān)告訴 ld 不要把相同的入口合并起來.-section-start SECTIONNAME=ORG通過指定 ORG, 指定節(jié)在輸出文件中的絕對地址. 你可以多次使用這個選項來定位多個節(jié). ORG 必須是一個十六進制整數(shù); 為了跟基他的連接器兼容,你可以忽略前導0 x. 注意,在 SECTIONNAME,等號,ORG 之間不允許有空格出現(xiàn).-Tbss ORG -Tdata ORG-Ttext ORG跟-section-start 同義, 不過把 S
57、ECTIONNAME 替換為.bss, .data或.text.-dll-verbose-verbose顯示 ld 的版本號,并列出支持的連接器模擬. 顯示哪些輸入文件能被打開,而哪些不能. 顯示連接器使用的連接腳本.-version-script=VERSION-SCRIPTFILE指定連接器的腳本的版本名. 這個常在創(chuàng)建一個需要指定附加的關(guān)于版本層次的信息的共享庫時使用,這個選項只有支持共享庫的 ELF 平臺上有效.-warn-common當一個普通符號跟另一個普通符號或會號定義合并起來時,警告.類 Unix 連接器允許這個選項,有時比較實用, 但是在其他的操作系統(tǒng)上的連接器不允許這個.這
58、個選項可以讓你在合并全局符號時發(fā)現(xiàn)某些潛在的問題. 不幸的是,有些 C 庫使用這項特性,所以你可能會像在你的程序中一樣,在庫中得到一些警告信息.這里給出三種類型的全局符號的解釋(用 C 語言): int i = 1;一個定義, 它會存在于輸出文件中的已初始化數(shù)據(jù)節(jié). extern int i;一個未定義符號,它不占用空間. 必須在另外某一處對它有一個定義,或一個普通符號 int i;一個普通符號.如果對于一個變量只有(一個或多個)普通符號, 它進入輸出文件的未初始化數(shù)據(jù)域. 連接器會把同一變量的多個普通符號合并成一個單一的符號. 如果他們有不同的大小, 它采用最大的一個. 如果是對同一變量的定
59、義,連接器把一個普通符號轉(zhuǎn)化為一個聲明. -warn-common選項可以產(chǎn)生五種類型的警告. 每種警告由兩行組成: 第一行描述遇到的符號, 第二行描述遇到的前一個具有相同名字的符號. 一個或兩個都可能成為普通符號.1). 把一個普通符號轉(zhuǎn)化為一個引用, 因為這個符號已經(jīng)有一個定義了.FILE(SECTION): warning: common of SYMBOL overridden by definitionFILE(SECTION): warning: defined here2). 把一個普通符號轉(zhuǎn)化為一個引用,因為遇到了第二個關(guān)于符號的定義. 這跟前一種情況相同,除了符號遇到的順序相
60、反.FILE(SECTION): warning: definition of SYMBOLoverriding commonFILE(SECTION): warning: common is here3). 把一個普通符號跟前一個相同大小的普通符號合并.FILE(SECTION): warning: multiple commonof SYMBOLFILE(SECTION): warning: previous common is here4). 把一個普通符號跟前一個更大的普通符號合并.FILE(SECTION): warning: common of SYMBOLoverridden b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國自動地板清洗機行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國聚合酶鏈反應技術(shù)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國群青色素行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國紙和紙板容器與包裝行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國空氣濾清器行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資前景研究報告
- 2025-2030中國積木市場發(fā)展優(yōu)勢與前景盈利模式分析研究報告
- 2025-2030中國礁石水族館行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國石雕行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025-2030中國石材加工機行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 25年公司、項目部、各個班組三級安全培訓考試試題附答案(A卷)
- YY/T 0825-2011牙科學牙齒外漂白產(chǎn)品
- 浙江省醫(yī)療機構(gòu)麻醉藥品、精神藥品管理實施細則
- 《中國近現(xiàn)代史綱要》 課件 第十一章 中國特色社會主義進入新時代
- 機關(guān)單位申請要人的請示范文
- 鈾礦冶安全規(guī)程
- 國標熱鍍鋅鋼管規(guī)格尺寸理論重量表
- 設計方案投標技術(shù)標文件
- 圓來如此簡單公開課優(yōu)質(zhì)課件獲獎
- (本科)審計(第五版)全套教學課件完整版PPT
- GB∕T 3639-2021 冷拔或冷軋精密無縫鋼管
- 拖欠貨款合同糾紛起訴狀范本
評論
0/150
提交評論