Linux / Unix命令:Id

名稱

ld - 使用LDGNU鏈接器

概要

ld [ options ] objfile ...

描述

ld結合了許多對象和歸檔文件 ,重新定位了它們的數據並綁定了符號引用。 通常編譯程序的最後一步是運行ld

ld接受以AT&T的鏈接編輯器命令語言語法超集編寫的鏈接器命令語言文件,以提供對鏈接過程的顯式和完全控制。

這個手冊頁沒有描述命令語言; 請參閱“info”中的ld條目或手冊ld: GNU鏈接器,了解有關命令語言和GNU鏈接器其他方面的完整詳細信息。

該版本的ld使用通用BFD庫來操作對象文件。 這允許ld讀取,合併和寫入許多不同格式的目標文件---例如COFF或“a.out”。 不同的格式可以鏈接在一起以產生任何可用類型的目標文件。

除了靈活性之外,GNU鏈接器在提供診斷信息方面比其他鏈接器更有幫助。 許多連接器在遇到錯誤時立即放棄執行。 只要有可能, ld會繼續執行,允許您識別其他錯誤(或者,在某些情況下,儘管出現錯誤,仍然可以獲取輸出文件)。

GNU 鏈接器ld旨在涵蓋各種各樣的情況,並儘可能與其他鏈接器兼容。 因此,您有很多選擇來控制其行為。

OPTIONS

鏈接器支持大量的 命令行選項 ,但在實際操作中很少使用任何特定的上下文。 例如,經常使用ld就是在標準的,受支持的Unix系統上鍊接標準的Unix對象文件。 在這樣的系統上,要鏈接一個文件“hello.o”:

ld -o /lib/crt0.o hello.o -lc

這告訴ld通過將文件“/lib/crt0.o”與“hello.o”和庫“libc.a”鏈接起來,生成一個名為output的文件,該文件將來自標準搜索目錄。 (請參閱下面的-l選項的討論。)

一些命令行選項可以在命令行中的任意位置指定。 但是,引用文件(例如-l-T )的選項會導致在選項出現在命令行中的位置(相對於目標文件和其他文件選項)讀取文件。 使用不同參數重複非文件選項將不會產生進一步的效果,或者覆蓋該選項的先前出現次數(命令行左側的出現次數)。 在下面的描述中註明了可能多次被有意義指定的選項。

非選項參數是要鏈接在一起的對象文件或檔案。 它們可以跟隨,先於或混入命令行選項,除了可以不在選項和其參數之間放置目標文件參數。

通常鏈接器至少要調用一個目標文件,但可以使用-l-R和腳本命令語言指定其他形式的二進制輸入文件。 如果沒有指定二進制輸入文件,則鏈接器不會生成任何輸出,並發出消息“ 無輸入文件”

如果鏈接器無法識別目標文件的格式,則會假定它是鏈接器腳本。 以這種方式指定的腳本將擴充用於鏈接的主鏈接器腳本(默認鏈接器腳本或使用-T指定的腳本)。 這個特性允許鏈接器鏈接到一個文件,該文件看起來像是一個對像或存檔,但實際上只是定義了一些符號值,或者使用“INPUT”或“GROUP”加載其他對象。 請注意,以這種方式指定腳本只會增加主鏈接器腳本; 使用-T選項完全替換默認鏈接器腳本。

對於名稱為單個字母的選項,選項參數必須跟隨選項字母而不介入空格,或者在需要它們的選項後立即作為單獨的參數提供。

對於名稱為多個字母的選項,可以在選項名稱前加上一個或兩個短劃線; 例如, -trace-symbol-trace -symbol是等價的。 請注意 - 此規則有一個例外。 以小寫字母“o”開頭的多字母選項只能以兩個破折號開頭。 這是為了減少與-o選項的混淆。 因此,例如-omagic將輸出文件名設置為magic,--omagic設置輸出上的NMAGIC標誌。

多字母選項的參數必須通過等號與選項名稱分開,或者在需要它們的選項之後立即作為單獨的參數提供。 例如,-- trace-symbol foo--trace-symbol = foo是等效的。 可接受多字母選項名稱的唯一縮寫。

注意 - 如果通過編譯器驅動程序(例如gcc )間接調用鏈接程序,則所有鏈接程序命令行選項都應該以-Wl (或適用於特定編譯器驅動程序的任何內容)作為前綴:

gcc -Wl, - startgroup foo.o bar.o -Wl, - endgroup

這很重要,因為否則編譯器驅動程序可能會默默刪除鏈接器選項,導致鏈接不良。

以下是GNU鏈接器接受的通用命令行開關的表格:

- 一個 關鍵字

HP / UX兼容性支持此選項。 關鍵字參數必須是存檔共享默認 字符串之一。 -archive在功能上等同於-Bstatic ,另外兩個關鍵字在功能上等同於-Bdynamic 。 此選項可以使用任意次數。

- 架構

- 架構 = 架構

在當前的ld版本中,該選項僅適用於Intel 960系列架構。 在該ld配置中, 體系結構參數標識了960系列中的特定體系結構,實現了一些安全措施並修改了歸檔庫搜索路徑。

ld的未來版本可能支持其他體系結構系列的類似功能。

-b 輸入格式

--format = 輸入格式

ld可能被配置為支持多種類型的目標文件。 如果以這種方式配置了ld,則可以使用-b選項為命令行上此選項後面的輸入對象文件指定二進制格式。 即使將ld配置為支持替代對象格式,通常也不需要指定該格式,因為應將ld配置為在每台計算機上將默認輸入格式視為最常見的格式。 input-format是一個文本字符串,它是BFD庫支持的特定格式的名稱。 (您可以使用objdump -i列出可用的二進制格式。)

如果您使用不常見的二進制格式鏈接文件,則可能需要使用此選項。 您還可以使用-b顯式切換格式(鏈接不同格式的目標文件時),方法是在每組特定格式的每個目標文件之前包含-b 輸入格式。

默認格式取自環境變量“GNUTARGET”。

您還可以使用命令“TARGET”從腳本中定義輸入格式;

-c MRI-命令文件

--mri-script = MRI-commandfile

為了與MRI生成的連接器兼容, ld接受以替代的有限命令語言編寫的腳本文件,如GNU ld文檔的MRI Compatible Script Files部分所述。 使用選項-c引入MRI腳本文件; 使用-T選項來運行用通用ld腳本語言編寫的鏈接器腳本。 如果MRI-cmdfile不存在, ld將在任何-L選項指定的目錄中查找它。

-d

-dc

-dp

這三個選項是相同的; 為了與其他鏈接器兼容,支持多種形式。 即使指定了可重定位輸出文件(使用-r ),它們也會為常用符號分配空間。 腳本命令“FORCE_COMMON_ALLOCATION”具有相同的效果。

-e 條目

--entry = 條目

使用條目作為開始執行程序的顯式符號,而不是缺省入口點。 如果沒有符號名稱條目 ,鏈接器將嘗試將條目解析為一個數字,並將其用作條目地址(數字將以10為底數解釋;您可以使用基數16的前導0x或前導0對於基地8)。

-E

--export動態

創建動態鏈接的可執行文件時,將所有符號添加到動態符號表中。 動態符號表是在運行時從動態對象可見的一組符號。

如果您不使用此選項,則動態符號表通常只包含由鏈接中提及的某個動態對象引用的那些符號。

如果使用“dlopen”加載一個需要返回到程序定義的符號而不是其他動態對象的動態對象,那麼在鏈接程序本身時可能需要使用此選項。

如果輸出格式支持,您還可以使用版本腳本來控制應將哪些符號添加到動態符號表中。 請參閱@ ref {VERSION}中的--version-script的描述。

-EB

鏈接大端對象。 這會影響默認的輸出格式。

-EL

鏈接小端對象。 這會影響默認的輸出格式。

-F

- 輔助 名稱

創建ELF共享對象時,請將內部DT_AUXILIARY字段設置為指定的名稱。 這告訴動態鏈接器,共享對象的符號表應該用作共享對象符號表上的輔助過濾器。

如果稍後將一個程序與此過濾器對象鏈接,那麼當您運行該程序時,動態鏈接程序將看到DT_AUXILIARY字段。 如果動態鏈接器解析過濾器對像中的任何符號,它將首先檢查共享對象名稱中是否存在定義。 如果有,它將被用來代替過濾器對像中的定義。 共享對象名稱不必存在。 因此,共享對象名稱可用於提供特定功能的替代實現,可能用於調試或針對機器特定的性能。

該選項可能會多次指定。 DT_AUXILIARY條目將按照它們在命令行上出現的順序創建。

-F 名稱

- 過濾器 名稱

創建ELF共享對象時,將內部DT_FILTER字段設置為指定的名稱。 這告訴動態鏈接器,正在創建的共享對象的符號表應該用作共享對象名稱的符號表上的過濾器。

如果稍後將一個程序與此過濾器對象鏈接,那麼當您運行程序時,動態鏈接器將看到DT_FILTER字段。 動態鏈接器將像往常一樣根據過濾器對象的符號表來解析符號,但它實際上會鏈接到在共享對象名稱中找到的定義。 因此,可以使用過濾器對象來選擇由對象名稱提供的符號的子集。

一些較老的連接器在整個編譯工具鏈中使用-F選項來為輸入和輸出對象文件指定對象文件格式。 GNU鏈接器為此使用其他機制: -b ,-- format ,-- oformat選項,鏈接器腳本中的“TARGET”命令以及“GNUTARGET”環境變量。 當不創建ELF共享對象時,GNU鏈接器將忽略-F選項。

-fini的 名字

創建ELF可執行文件或共享對象時,通過將DT_FINI設置為該函數的地址,在卸載可執行文件或共享對象時調用NAME。 默認情況下,鏈接器使用“_fini”作為調用的函數。

-G

忽略。 提供與其他工具的兼容性。

-G

--gpsize =

使用GP寄存器設置要優化的對象的最大大小 。 這只對目標文件格式有意義,例如MIPS ECOFF支持將大對象和小對象放入不同的部分。 對於其他目標文件格式,這被忽略。

-h 名稱

-soname = 名稱

創建ELF共享對象時,請將內部DT_SONAME字段設置為指定的名稱。 當一個可執行文件與一個具有DT_SONAME字段的共享對象鏈接時,那麼當可執行文件運行時,動態鏈接器將嘗試加載由DT_SONAME字段指定的共享對象,而不是使用給予鏈接器的文件名稱。

-一世

執行增量鏈接(與選項-r相同)。

-init 名稱

創建ELF可執行文件或共享對象時,通過將DT_INIT設置為該函數的地址,在加載可執行文件或共享對象時調用NAME。 默認情況下,鏈接器使用“_init”作為函數來調用。

-l 檔案

--library = 檔案

存檔文件 存檔添加到要鏈接的文件列表。 此選項可以使用任意次數。 ld會為每個指定的壓縮文件在其路徑列表中搜索“libarchive.a”的出現次數。

在支持共享庫的系統上, ld也可以搜索擴展名為“.a”以外的庫。 具體而言,在ELF和SunOS系統上, ld將搜索擴展名為“.so”的庫的目錄,然後搜索擴展名為“.a”的庫。 按照慣例,“.so”擴展名表示共享庫。

鏈接器只會在命令行指定的位置搜索一次存檔。 如果歸檔文件定義了一個符號,該符號在命令行上歸檔之前出現的某個對像中未定義,則鏈接器將從歸檔文件中包含相應的文件。 但是,稍後在命令行中出現的對像中的未定義符號將不會導致鏈接器再次搜索存檔。

請參閱- (用於強制鏈接器多次搜索存檔的方式的選項。

您可以在命令行上多次列出相同的存檔。

這種歸檔搜索類型是Unix連接器的標準。 但是,如果您使用ld onAIX,請注意它與AIX鏈接器的行為不同。

-L searchdir

--library-path = searchdir

將路徑searchdir添加到ld將搜索歸檔庫和ld控制腳本的路徑列表中。 您可以多次使用此選項。 這些目錄按照它們在命令行中指定的順序進行搜索。 在默認目錄之前搜索命令行上指定的目錄。 無論選項出現的順序如何,所有-L選項都適用於所有-l選項。

如果searchdir以“=”開頭,則“=”將替換為sysroot前綴 ,即鏈接器配置時指定的路徑。

搜索到的默認路徑集(不用-L指定)取決於哪個仿真模式ld正在使用,在某些情況下還取決於配置方式。

路徑也可以通過“SEARCH_DIR”命令在鏈接腳本中指定。 在鏈接器腳本出現在命令行中的位置搜索以此方式指定的目錄。

-m 仿真

模擬仿真鏈接器。 您可以使用--verbose-V選項列出可用的模擬。

如果未使用-m選項,則仿真將取自“LDEMULATION”環境變量(如果已定義)。

否則,默認模擬取決於連接器的配置方式。

-M

--print地圖

打印一個鏈接地圖到標準輸出。 鏈接地圖提供有關鏈接的信息,包括以下內容:

*

目標文件和符號被映射到內存中。

*

常用符號如何分配。

*

所有歸檔成員都包含在鏈接中,並提及導致歸檔成員被引入的符號。

-n

--nmagic

關閉部分的頁面對齊,並儘可能將輸出標記為“NMAGIC”。

-N

--omagic

將文本和數據部分設置為可讀寫。 另外,不要頁對齊數據段,並禁用鏈接到共享庫。 如果輸出格式支持Unix樣式幻數,請將輸出標記為“OMAGIC”。

--no-OMAGIC

這個選項抵消了-N選項的大部分影響。 它將文本部分設置為只讀,並強制數據段進行頁面對齊。 注意 - 該選項不支持鏈接到共享庫。 為此使用-Bdynamic

-o 輸出

--output = 輸出

使用輸出作為由ld生成的程序的名稱; 如果未指定此選項,則默認使用名稱a.out 。 腳本命令“OUTPUT”也可以指定輸出文件的名稱。

-O 級別

如果level是一個大於零的數值, ld會優化輸出。 這可能需要更長的時間,因此可能應該只對最終的二進製文件啟用。

-q

--emit-relocs

將重定位部分和內容留在完全鏈接的可執行文件中。 後鏈接分析和優化工具可能需要此信息才能對可執行文件執行正確的修改。 這導致更大的可執行文件。

此選項目前僅在ELF平台上受支持。

-r

--relocateable

生成可重定位的輸出---即生成一個輸出文件,該文件又可以作為ld的輸入。 這通常稱為部分鏈接 。 作為副作用,在支持標準Unix幻數的環境中,該選項還將輸出文件的幻數設置為“OMAGIC”。 如果未指定此選項,則生成絕對文件。 鏈接C ++程序時,該選項不會解析對構造函數的引用; 要做到這一點,請使用-Ur

如果輸入文件的格式與輸出文件不相同,則僅當輸入文件不包含任何重定位時才支持部分鏈接。 不同的輸出格式可能會有更多限制; 例如一些基於“a.out”的格式不支持與其他格式的輸入文件進行部分鏈接。

這個選項和-i一樣

-R 文件名

--just-symbols = 文件名

文件名讀取符號名稱及其地址,但不要重定位或將其包含在輸出中。 這允許您的輸出文件象徵性地引用其他程序中定義的絕對內存位置。 您可以多次使用此選項。

為了與其他ELF鏈接器兼容,如果-R選項後面跟有目錄名稱,而不是文件名,則將其視為-rpath選項。

-s

--strip-ALL

省略輸出文件中的所有符號信息。

-S

--strip調試

忽略輸出文件中的調試器符號信息(但不是全部符號)。

-t

- 跟踪

將輸入文件的名稱作為ld處理它們。

-T 腳本文件

--script = scriptfile

使用scriptfile作為鏈接器腳本。 該腳本替換了ld的默認鏈接器腳本(而不是添加到它),因此commandfile必須指定描述輸出文件所需的所有內容。 如果scriptfile在當前目錄中不存在,“ld”會在任何前面的-L選項指定的目錄中查找它。 多個-T選項累積。

-u 符號

--undefined = 符號

將強制符號作為未定義符號輸入到輸出文件中。 例如,這可能會觸發從標準庫中鏈接附加模塊。 -u可以用不同的選項參數重複輸入其他未定義的符號。 該選項等同於“EXTERN”鏈接描述文件命令。

-ur

對於除C ++程序以外的其他任何內容,此選項等同於-r :它會生成可重定位的輸出---即輸出文件,該輸出文件又可用作ld的輸入。 在鏈接C ++程序時, -Ur 確實解析了對構造函數的引用,與-r不同。 它不適用於-Ur文件,這些文件本身與-Ur鏈接; 一旦構造函數表被構建,它就不能被添加到。 使用-Ur僅用於最後一個部分鏈接, -r用於其他部分鏈接。

--unique [= SECTION ]

為每個匹配SECTION的輸入節創建一個單獨的輸出 ,或者如果缺少可選的通配符SECTION參數,則為每個孤立輸入節創建一個單獨的輸出節。 孤兒部分是鏈接器腳本中未特別提到的部分。 您可以在命令行上多次使用此選項; 它可以防止具有相同名稱的輸入節的正常合併,覆蓋鏈接器腳本中的輸出節分配。

-v

- 版

-V

顯示ld的版本號。 -V選項還列出了支持的仿真。

-X

--discard,所有

刪除所有本地符號。

-X

--discard本地人

刪除所有臨時的本地符號。 對於大多數目標來說,這是所有以L開頭的本地符號。

-y 符號

--trace-symbol = 符號

打印出現符號的每個鏈接文件的名稱。 這個選項可以被賦予任意次數。 在許多系統上,需要預先加下劃線。

如果鏈接中有未定義的符號,但不知道引用來自何處,則此選項非常有用。

-Y 路徑

路徑添加到默認庫搜索路徑。 該選項存在於Solaris兼容性中。

-z 關鍵字

公認的關鍵詞是“initfirst”,“interpose”,“loadfltr”,“nodefaultlib”,“nodelete”,“nodlopen”,“nodump”,“now”,“origin”,“combreloc”,“nocombreloc”和“nocopyreloc “。 對於Solaris兼容性,其他關鍵字將被忽略。 “initfirst”標記要在運行時首先在任何其他對象之前初始化的對象。 “interpose”標記其符號表在所有符號之前插入的對象,而不是主要可執行文件。“loadfltr”標記其對像在運行時立即被處理。“nodefaultlib”標記該對象的依賴關係搜索將忽略的對象任何默認庫搜索路徑。 “nodelete”標誌著對像不應該在運行時被卸載。 “nodlopen”標記不可用於“dlopen”的對象。 “nodump”標記的對像不能被“dldump”傾倒。 “now”用非延遲運行時綁定標記對象,“origin”標記對象可能包含$ ORIGIN。 “defs”不允許未定義的符號。“muldefs”允許多個定義。 “combreloc”結合了多個reloc節並對它們進行排序,從而使動態符號查找緩存成為可能。

“nocombreloc”禁用多個reloc節組合。 “nocopyreloc”會禁用複制重定位的生成。

- ( 檔案 - )

--start-group 檔案 --end-group

檔案應該是檔案文件的列表。 它們可能是顯式文件名或-l選項。

重複搜索指定的檔案,直到沒有創建新的未定義參考。 通常情況下,檔案只會在命令行中指定的順序搜索一次。 如果需要該歸檔中的符號來解析在命令行中稍後出現的歸檔中由對象引用的未定義符號,則鏈接程序將無法解析該引用。 通過對檔案進行分組,他們都被重複搜索,直到解決所有可能的參考。

使用此選項會產生顯著的性能成本。 只有在兩個或多個檔案之間存在不可避免的循環引用時才最好使用它。

--accept未知輸入拱

--no-接受未知輸入拱

告訴鏈接器接受其體系結構無法識別的輸入文件。 假設是用戶知道他們在做什麼並故意要鏈接這些未知的輸入文件。 這是鏈接器在版本2.14之前的默認行為。 從版本2.14開始的默認行為是拒絕這些輸入文件,因此添加了--accept-unknown-input-arch選項來恢復舊行為。

-assert 關鍵字

SunOS兼容性忽略此選項。

-Bdynamic

-dy

-call_shared

鏈接到動態庫。 這僅在支持共享庫的平台上才有意義。 此選項通常是此類平台上的默認選項。 這個選項的不同變體是為了與各種系統兼容。 您可以在命令行上多次使用此選項:它會影響庫搜索其後的-l選項。

-Bgroup

在動態部分的“DT_FLAGS_1”條目中設置“DF_1_GROUP”標誌。 這會導致運行時鏈接程序處理此對像中的查找以及僅在組內執行的依賴關係。 - 不確定是隱含的。 該選項僅對支持共享庫的 ELF平台有意義。

-Bstatic

-dn

-non_shared

-靜態的

不要鏈接到共享庫。 這僅在支持共享庫的平台上才有意義。 這個選項的不同變體是為了與各種系統兼容。 您可以在命令行上多次使用此選項:它會影響庫搜索其後的-l選項。

-Bsymbolic

創建共享庫時,將引用全局符號綁定到共享庫中的定義(如果有)。 通常,鏈接到共享庫的程序可能會覆蓋共享庫中的定義。 該選項僅對支持共享庫的ELF平台有意義。

--check截面

--no檢查截面

要求鏈接程序在分配它們之後不要檢查節地址,以查看是否有重疊。 通常鏈接器將執行此檢查,如果發現任何重疊,它將生成適當的錯誤消息。 鏈接器確實知道,並確實為覆蓋圖中的部分提供了許可。 可以使用命令行開關--check-sections恢復默認行為。

--cref

輸出一個交叉引用表。 如果正在生成鏈接器映射文件,則將交叉引用表打印到映射文件。 否則,它將打印在標準輸出上。

表的格式是故意簡單的,以便在必要時可以通過腳本輕鬆處理。 這些符號被打印出來,按名稱排序。 對於每個符號,都給出了一個文件名列表。 如果符號已定義,則列出的第一個文件是定義的位置。 其余文件包含對該符號的引用。

--no-限定共用

該選項禁止將地址分配給常用符號。 腳本命令“INHIBIT_COMMON_ALLOCATION”具有相同的效果。

--no-define-common選項允許解耦來自選擇輸出文件類型的地址分配給Common符號的決定; 否則不可重定位輸出類型強制將地址分配給通用符號。 使用--no-define-common允許從共享庫引用的通用符號僅在主程序中分配地址。 這消除了共享庫中未使用的重複空間,並且還避免了在存在許多具有用於運行時符號解析的專用搜索路徑的動態模塊時解決錯誤重複的任何可能的混淆。

--defsym symbol = 表達式

在輸出文件中創建一個全局符號,其中包含由expression給出的絕對地址。 您可以根據需要多次使用此選項,以在命令行中定義多個符號。 此上下文中表達式支持一種有限的算術形式:您可以給出一個十六進制常量或現有符號的名稱,或者使用“+”和“ - ”來添加或減去十六進制常量或符號。 如果您需要更精細的表達式,請考慮使用腳本中的鏈接器命令語言。 注意: 符號 ,等號(`` = '')和表達式之間不應有空格。

--demangle [= 樣式 ]

--no-還原函數

這些選項控制是否在錯誤消息和其他輸出中去除符號名稱。 當鏈接器被告知需要解除縮放時,它會嘗試以可讀的方式呈現符號名稱:如果它們被對象文件格式使用,則將其刪除前導下劃線,並將C ++損壞的符號名稱轉換為用戶可讀的名稱。 不同的編譯器有不同的移動樣式。 可選的demangling樣式參數可用於為編譯器選擇合適的demangling樣式。 除非設置了環境變量COLLECT_NO_DEMANGLE,否則默認情況下鏈接器會被取消 。 這些選項可用於覆蓋默認值。

- 動態鏈接器 文件

設置動態鏈接器的名稱。 這只在生成動態鏈接的ELF可執行文件時才有意義。 默認的動態鏈接器通常是正確的; 除非你知道你在做什麼,否則不要使用它。

--embedded-relocs

此選項僅在將由-membedded-pic選項生成的MIPS嵌入式PIC代碼鏈接到GNU編譯器和彙編器時有意義。 它使鏈接器創建一個表,可以在運行時使用該表來重新定位靜態初始化為指針值的任何數據。 有關詳細信息,請參閱testsuite / ld-empic中的代碼。

--fatal的警告

將所有警告視為錯誤

--force-EXE後綴

確保輸出文件具有.exe後綴。

如果成功構建的完全鏈接的輸出文件沒有“ .exe ”或“ .dll ”後綴,則此選項會強制鏈接器將輸出文件複製為具有“.exe”後綴的同名文件。 在Microsoft Windows主機上使用未修改的Unix makefile時,此選項很有用,因為除非以“.exe”後綴結尾,否則某些版本的Windows將不會運行映像。

--no-GC-節

--gc截面

啟用垃圾收集未使用的輸入節。 對不支持此選項的目標會被忽略。 該選項與-r不兼容,也不應與動態鏈接一起使用。 通過在命令行中指定--no-gc-sections ,可以恢復默認行為(不執行此垃圾回收 )。

- 幫幫我

打印標準輸出上的命令行選項摘要並退出。

--target-幫助

打印標準輸出上所有目標特定選項的摘要並退出。

-Map地圖文件

將鏈接映射打印到文件映射文件。 請參閱上面的-M選項的說明。

--no-保持記憶

ld通常通過在內存中緩存輸入文件的符號表來優化內存使用速度。 該選項告訴ld通過根據需要重新讀取符號表來優化內存使用情況。 如果ld在鏈接大型可執行文件時耗盡了內存空間,則可能需要這樣做

--no-未定義

-z defs

通常,在創建非符號共享庫時,允許未定義的符號,並由運行時加載程序解決。 這些選項不允許使用這些未定義的符號。

--allow-多重定義

-z muldefs

通常當符號被定義多次時,鏈接器將報告一個致命錯誤。 這些選項允許多個定義,第一個定義將被使用。

--allow-SHLIB-未定義

即使設置了--no-undefined,也允許共享對像中的未定義符號。 最終結果是常規對像中的未定義符號仍然會觸發錯誤,但共享對像中的未定義符號將被忽略。 no_undefined的實現會假設運行時鏈接程序將扼殺未定義的符號。 然而,至少有一個系統(BeOS)在共享庫中的未定義符號是正常的,因為內核在加載時對它們進行修補,以選擇哪個函數最適合當前體系結構。 IE動態選擇一個適當的memset函數。 顯然,HPPA共享庫有未定義的符號也是正常的。

--no-未定義版本

通常,當符號具有未定義的版本時,鏈接器將忽略它。 此選項不允許使用未定義版本的符號,而是發出致命錯誤。

--no-警告不匹配

通常情況下,如果您嘗試將由於某種原因不匹配的輸入文件鏈接在一起,可能是因為它們已針對不同的處理器或不同的字節序進行了編譯,那麼ld會給出錯誤。 這個選項告訴ld它應該默默地允許這樣的可能的錯誤。 只有在您採取了一些確保鏈接器錯誤不適當的特殊操作的情況下,才應謹慎使用此選項。

--no-整個歸檔

關閉隨後存檔文件的--whole-archive選項的效果。

--noinhibit-EXEC

只要它仍然可用,就保留可執行輸出文件。 通常,鏈接器在鏈接過程中遇到錯誤時不會生成輸出文件; 當它發出任何錯誤時它會退出而不寫入輸出文件。

-nostdlib

只搜索在命令行中明確指定的庫目錄。 鏈接器腳本中指定的庫目錄(包括在命令行中指定的鏈接器腳本)將被忽略。

--oformat 輸出格式

ld可能被配置為支持多種類型的目標文件。 如果以這種方式配置了ld,則可以使用--oformat選項指定輸出對象文件的二進制格式。 即使將ld配置為支持替代對象格式,通常也不需要指定此格式,因為應將ld配置為將每台機器上最常見的格式作為默認輸出格式生成。 output-format是一個文本字符串,BFD庫支持的特定格式的名稱。 (您可以使用objdump -i列出可用的二進制格式。)腳本命令“OUTPUT_FORMAT”也可以指定輸出格式,但是此選項將覆蓋它。

-qmagic

Linux兼容性忽略此選項。

-Qy

對於SVR4兼容性,此選項被忽略。

- 放鬆

機器相關效果的選項。 該選項僅在少數目標上受支持。

在某些平台上,當鏈接器解析程序中的尋址時,-- relax選項執行全局優化,例如放寬地址模式並在輸出目標文件中合成新指令。

在某些平台上,這些鏈接時間全局優化可能會導致生成的可執行文件無法進行符號調試 。 眾所周知,松下MN10200和MN10300系列處理器就是這種情況。

在不支持此功能的平台上,可以接受--relax ,但會被忽略。

--retain-symbols-file filename

保留文件文件名中列出的符號,丟棄所有其他符號。 filename只是一個平面文件,每行一個符號名稱。 此選項在環境(如VxWorks)中逐漸累積大型全局符號表時特別有用,以節省運行時內存。

--retain-symbols-file不會丟棄未定義的符號或重定位所需的符號。

您只能在命令行中指定--retain-symbols-file一次。 它覆蓋了-s-S

-rpath 目錄

將目錄添加到運行時庫搜索路徑。 這在連接ELF可執行文件和共享對象時使用。 將所有-rpath參數連接起來並傳遞給運行時鏈接程序,該鏈接程序使用它們在運行時定位共享對象。 在查找明確包含在鏈接中的共享對象所需的共享對象時,也會使用-rpath選項; 請參閱-rpath-link選項的說明。 如果在鏈接ELF可執行文件時未使用-rpath,則將使用環境變量“LD_RUN_PATH”的內容(如果已定義)。

SunOS上也可以使用-rpath選項。 默認情況下,在SunOS上,鏈接器將從所有-L選項中構建一個運行時搜索補丁。 如果使用-rpath選項,則運行時搜索路徑將僅使用-rpath選項形成,而忽略-L選項。 這在使用gcc時很有用,它會添加許多可能位於NFS掛載文件系統上的-L選項。

為了與其他ELF鏈接器兼容,如果-R選項後面跟有目錄名稱,而不是文件名,則將其視為-rpath選項。

-rpath-link DIR

使用ELF或SunOS時,一個共享庫可能需要另一個共享庫。 當“ld -shared”鏈接包含共享庫作為輸入文件之一時,會發生這種情況。

當鏈接器在執行非共享,不可重定位的鏈接時遇到這種依賴關係時,它將自動嘗試找到所需的共享庫並將其包含在鏈接中(如果未明確包含它)。 在這種情況下, -rpath-link選項指定要搜索的第一組目錄。 -rpath-link選項可以通過指定由冒號分隔的名稱列表或通過多次出現來指定一系列目錄名稱。

此選項應該謹慎使用,因為它會覆蓋可能已被硬編譯到共享庫中的搜索路徑。 在這種情況下,可能無意中使用與運行時鏈接程序不同的搜索路徑。

鏈接器使用以下搜索路徑來查找所需的共享庫。

1。

任何由-rpath-link選項指定的目錄。

2。

任何由-rpath選項指定的目錄。 -rpath-rpath-link之間的區別在於,由-rpath選項指定的目錄包含在可執行文件中並在運行時使用,而-rpath-link選項僅在鏈接時有效。 它僅適用於本地鏈接器。

3。

在ELF系統上,如果未使用-rpath和“rpath-link”選項,請搜索環境變量“LD_RUN_PATH”的內容。 它僅適用於本地鏈接器。

4。

在SunOS上,如果未使用-rpath選項,請搜索使用-L選項指定的任何目錄。

5。

對於本機鏈接器,環境變量“LD_LIBRARY_PATH”的內容。

6。

對於本地ELF鏈接程序,將搜索共享庫的“DT_RUNPATH”或“DT_RPATH”中的目錄以查找其所需的共享庫。 如果存在“DT_RUNPATH”條目,則會忽略“DT_RPATH”條目。

7。

默認目錄,通常是/ lib/ usr / lib

8。

對於ELF系統上的本地鏈接程序,如果文件/etc/ld.so.conf存在,則在該文件中找到目錄列表。

如果找不到所需的共享庫,鏈接器將發出警告並繼續鏈接。

-共享

-Bshareable

創建一個共享庫。 目前僅支持ELF,XCOFF和SunOS平台。 在SunOS上,如果未使用-e選項並且鏈接中有未定義的符號,鏈接器將自動創建共享庫。

--sort常見

該選項告訴ld在將常用符號放在適當的輸出節中時按大小排序。 先來所有的一個字節符號,然後是所有的兩個字節,然後是所有的四個字節,然後是一切。 這是為了防止由於對齊限製而導致符號之間的間隙。

- 按文件分割[ size ]

--split-by-reloc類似,但在達到大小時為每個輸入文件創建一個新的輸出節。 如果沒有給出, 大小默認大小為1。

- split-by-reloc [ count ]

試圖在輸出文件中創建額外的部分,以便文件中沒有單個輸出部分包含多個重定位計數 。 這在生成巨大的可重定位文件以便用COFF目標文件格式下載到某些實時內核時非常有用; 因為COFF不能代表單個部分中的65535個以上的重定位。 請注意,這將無法使用不支持任意部分的目標文件格式。 鏈接器不會拆分單個輸入段以便重新分配,因此如果單個輸入段包含多個重定位,則一個輸出段將包含多個重定位。 計數默認值為32768。

--stats

計算並顯示有關鏈接器操作的統計信息,例如執行時間和內存使用情況。

--traditional格式

對於某些目標, ld的輸出在某些方面與某些現有鏈接器的輸出不同。 這個開關要求ld使用傳統的格式。

例如,在SunOS上, ld將符號字符串表中的重複條目組合在一起。 這可以將具有完整調試信息的輸出文件的大小減少30%以上。 不幸的是,SunOS“dbx”程序無法讀取結果程序(“gdb”沒有問題)。 --traditional-format開關告訴ld不合併重複條目。

--section-start sectionname = org

輸出文件中找到由org指定的絕對地址的部分。 您可以根據需要多次使用此選項,以在命令行中找到多個部分。 org必須是單個十六進制整數; 為了與其他鏈接器兼容,您可以省略通常與十六進制值相關的前導0x注意: sectionname ,等號(`` = '')和org之間不應有空格。

-Tbss org

-T數據 組織

-Ttext org

分別使用org作為起始地址---輸出文件的“bss”,“data”或“text”段。 org必須是單個十六進制整數; 為了與其他鏈接器兼容,您可以省略通常與十六進制值相關的前導0x

--dll-詳細

--verbose

顯示ld的版本號並列出支持的鏈接器仿真。 顯示哪些輸入文件可以打開也可以不打開。 顯示鏈接器正在使用的鏈接器腳本。

--version-script = version-scriptfile

指定版本腳本的名稱給鏈接器。 這通常用於創建共享庫來指定有關正在創建的庫的版本級別的附加信息。 該選項僅對支持共享庫的ELF平台有意義。

--warn常見

當常用符號與另一個常用符號或符號定義組合時發出警告。 Unix連接器允許這種有點草率的做法,但其他一些操作系統上的連接器卻不能。 該選項允許您通過組合全局符號來查找潛在的問題。 不幸的是,一些C庫使用這種做法,所以你可能會得到一些有關庫中以及程序中的符號的警告。

有三種全局符號,這裡用C實例說明:

int i = 1;

一個定義,它位於輸出文件的初始化數據部分。

extern int i;

一個未定義的參考,它不分配空間。 某處必須有變量的定義或通用符號。

int i;

一個共同的象徵。 如果變量只有(一個或多個)通用符號,則它將進入輸出文件的未初始化數據區域。 鏈接器將同一變量的多個通用符號合併為一個符號。 如果它們的尺寸不同,它會選擇最大的尺寸。 如果存在相同變量的定義,則鏈接器將通用符號變成聲明。

--warn-common選項可以產生五種警告。 每條警告都由一對線構成:第一條描述剛剛遇到的符號,第二條描述前一個遇到同名的符號。 兩個符號中的一個或兩個將是通用符號。

1。

將一個通用符號轉換為引用,因為符號已經有了一個定義。

):warning:定義
)覆蓋的的common:warning:此處定義

2。

將一個公共符號變成一個引用,因為遇到了符號的後續定義。 這與前面的情況相同,只是符號遇到不同的順序。

):warning:定義覆蓋常見的
)::warning:common is here

3。

將常用符號與先前相同大小的通用符號合併。

):warning:<的多個公共
):warning:先前的常見在這裡

4。

將常用符號與前一個較大的常用符號合併。

):警告:被較大的公共
)覆蓋的<的common:warning:較大的common在這裡

5。

將常用符號與前一個較小的常用符號合併。 這與前面的情況相同,只是符號遇到不同的順序。

):警告:<的common覆蓋較小的常用
):warning:較小的common在這裡

--warn-構造

警告如果使用任何全局構造函數。 這只對少數目標文件格式有用。 對於像COFF或ELF這樣的格式,鏈接器無法檢測到使用全局構造函數。

--warn海報-GP

如果輸出文件中需要多個全局指針值,則發出警告。 這對於某些處理器(如Alpha)僅有意義。 具體而言,一些處理器將大數值常量放在特殊部分中。 一個特殊的寄存器(全局指針)指向本節的中間部分,以便可以通過基址寄存器相對尋址模式有效地加載常量。 由於基址寄存器相對模式的偏移是固定的並且相對較小(例如,16位),因此限制了常量池的最大大小。 因此,在大型程序中,為了能夠處理所有可能的常量,通常需要使用多個全局指針值。 此選項會導致發生此情況時發出警告。

一次--warn

只對每個未定義的符號發出一次警告,而不是每個模塊引用一次。

--warn截面對準

如果輸出部分的地址由於對齊而改變,則發出警告。 通常,對齊將由輸入部分設置。 只有在未明確指定的情況下,地址才會被更改; 也就是說,如果“SECTIONS”命令沒有指定該部分的起始地址。

--whole歸檔

對於--whole-archive選項後命令行上提到的每個存檔,請將鏈接中存檔中的每個目標文件包括在內,而不是在存檔中搜索所需的目標文件。 這通常用於將存檔文件轉換為共享庫,從而強制每個對像都包含在生成的共享庫中。 該選項可能會多次使用。

從gcc使用這個選項時需要注意兩點:首先,gcc不知道這個選項,所以你必須使用-Wl,-whole-archive 。 其次,不要忘記在歸檔列表後面使用-Wl,-no-whole-archive ,因為gcc會將自己的歸檔列表添加到鏈接中,並且您可能不希望此標誌影響這些歸檔。

- 包裝 符號

使用符號的包裝函數。 任何未定義的符號引用將被解析為“__ wrap_symbol”。 對“__real_symbol”的任何未定義的引用將被解析為符號

這可以用來為系統功能提供包裝。 包裝函數應該被稱為“__wrap_symbol”。 如果它希望調用系統函數,它應該調用“__ real_symbol”。

這是一個微不足道的例子:

void * __wrap_malloc(int c){printf(“用%ld調用malloc \ n”,c); return __real_malloc(c); }

如果使用--wrap malloc將其他代碼與此文件鏈接起來,則所有對“malloc”的調用都會調用函數“__wrap_malloc”。 在“__wrap_malloc”中調用“__real_malloc”將調用真正的“malloc”函數。

您也可能希望提供一個“__real_malloc”函數,這樣沒有--wrap選項的鏈接將會成功。 如果你這樣做,你不應該把“__ real_malloc”的定義放在與“__wrap_malloc”相同的文件中; 如果這樣做,彙編器可能會在鏈接器有機會將其包裝到“malloc”之前解析調用。

--enable-新的DTAG

-禁用新的DTAG

這個鏈接器可以在ELF中創建新的動態標籤。 但是舊的ELF系統可能不理解它們。 如果您指定--enable-new-dtags ,則會根據需要創建動態標籤。 如果您指定--disable-new-dtags ,則不會創建新的動態標籤。 默認情況下,不會創建新的動態標籤。 請注意,這些選項僅適用於ELF系統。

i386 PE鏈接器支持-shared選項,這會使輸出成為動態鏈接庫(DLL)而不是常規可執行文件。 您應該在使用此選項時將輸出命名為“* .dll”。 另外,鏈接器完全支持標準的“* .def”文件,這些文件可以在鏈接器命令行上指定為一個目標文件(實際上,它應該在存檔之前導出符號,以確保它們鏈接到,就像一個普通的對象文件一樣)。

除了所有目標所共有的選項外,i386 PE鏈接器還支持特定於i386 PE目標的其他命令行選項。 採用值的選項可以通過空格或等號分隔它們的值。

--add-STDCALL別名

如果給出,具有stdcall後綴(@ nn )的符號將按原樣導出,並且也會剝離後綴。

- 基礎文件 文件

使用file作為文件的名稱,用於保存使用dlltool生成DLL所需的所有重定位的基

--dll

創建一個DLL而不是常規的可執行文件。 您也可以在給定的“.def”文件中使用-shared或指定“LIBRARY”。

--enable-STDCALL,修正

-禁用STDCALL,修正

如果鏈接找到它無法解析的符號,它將嘗試通過查找另一個僅在符號名稱(cdecl vs stdcall)格式上不同的已定義符號來執行“模糊鏈接”,並通過鏈接來解析該符號到比賽。 例如,未定義的符號“_foo”可能鏈接到函數“_foo @ 12”,或者未定義的符號“_bar @ 16”可能鏈接到函數“_bar”。 鏈接器執行此操作時,會打印警告,因為它通常應該無法鏈接,但有時從第三方dll生成的導入庫可能需要此功能才能使用。 如果您指定--enable-stdcall-fixup ,則此功能已完全啟用,並且不會打印警告。 如果您指定--disable-stdcall-fixup ,則禁用此功能,並將這種不匹配視為錯誤。

--export-所有符號

如果給定,用於構建DLL的對像中的所有全局符號都將由DLL導出。 請注意,如果不存在任何導出符號,則這是默認值。 當符號通過DEF文件顯式導出或通過函數屬性隱式導出時,默認情況下不導出任何其他內容,除非提供此選項。 請注意,符號“DllMain @ 12”,“DllEntryPoint @ 0”,“DllMainCRTStartup @ 12”和“impure_ptr”不會自動導出。 此外,從其他DLL導入的符號將不會被重新導出,也不會指定DLL內部佈局的符號,例如以“_head_”開頭或以“_iname”結尾的符號。 另外,將不會導出“libgcc”,“libstd ++”,“libmingw32”或“crtX.o”的符號。 不會導出名稱以“__rtti_”或“__builtin_”開頭的符號,以幫助C ++ DLL。 最後,還有一大堆沒有導出的cygwin-private符號(顯然,這適用於為cygwin目標構建DLL時)。

cygwin_premain2,cygwin_premain2,cygwin_premain2,cygwin_premain2,cygwin_premain2,cygwin_premain2,cygwin_premain2, “和”環境“。

- 排除 - 符號 符號 符號 ...

指定不應自動導出的符號列表。 符號名稱可以用逗號或冒號分隔。

--exclude-libs lib lib ,...

指定不應自動導出符號的歸檔庫列表。 庫名可以用逗號或冒號分隔。 指定“--exclude-libs ALL”會從自動導出中排除所有歸檔庫中的符號。 不管此選項如何,在.def文件中明確列出的符號仍將被導出。

--file對齊

指定文件對齊。 文件中的節將始終以文件偏移量開始,該偏移量是該數字的倍數。 這默認為512。

- 堆 預留

- 堆 預留 提交

指定要用作此程序的堆的要保留的內存量(以及可選的提交)。 默認值是1Mb保留,4K已提交。

- 圖像基準

使用作為您的程序或dll的基地址。 這是加載程序或dll時將使用的最低內存位置。 為了減少重定位和提高你的dll性能的需要,每個應該有一個唯一的基址,並且不與其他任何dll重疊。 對於可執行文件,默認值為0x400000,對於dll,默認值為0x10000000。

--kill,在

如果給定,stdcall後綴(@ nn )將在導出之前從符號中去除。

- 主要圖像版本

設置“圖像版本”的主要編號。 默認為1。

- 主要版本的

設置“os版本”的主號碼。 默認為4。

- 主要子系統版本

設置“子系統版本”的主號碼。 默認為4。

--minor-image-version

設置“圖像版本”的次要編號。 默認為0。

--minor-os-version

設置“os版本”的次要編號。 默認為0。

--minor-subsystem-version

設置“子系統版本”的次要編號。 默認為0。

--output-def 文件

鏈接器將創建文件文件 ,該文件將包含與鏈接器生成的DLL相對應的DEF文件。 這個DEF文件(應該被稱為“* .def”)可以用來創建一個帶有“dlltool”的導入庫,或者可以用作自動或隱式導出符號的引用。

--out-implib 文件

鏈接器將創建文件文件 ,該文件將包含與鏈接器生成的DLL相對應的導入庫。 這個導入庫(應該被稱為“* .dll.a”或“* .a”)可以用來將客戶端鏈接到生成的DLL;這種行為使得跳過單獨的“dlltool”導入庫創建步驟成為可能。

--enable-自動圖像基

自動為DLL選擇圖像庫,除非使用“--image-base”參數指定。 通過使用從dllname生成的哈希來為每個DLL創建獨特的圖像庫,可以避免可能延遲程序執行的內存中的衝突和重定位。

-禁用自動圖像基

不要自動生成獨特的圖像庫。 如果沒有用戶指定的圖像庫(“--image-base”),則使用平台默認值。

--dll-search-prefix 字符串

當動態鏈接到沒有導入庫的dll時,首先搜索“ .dll”,優先於“lib .dll”。 這種行為可以輕鬆區分為各種“子平台”構建的DLL:native,cygwin,uwin,pw等。例如,cygwin DLL通常使用“--dll-search-prefix = cyg”。

--enable-自動導入

對從DLL導入的數據進行“_symbol”到“__imp__symbol”的複雜鏈接,並在使用這些DATAexport構建導入庫時創建必要的thunk符號。 這通常會“正常工作” - 但有時您可能會看到這樣的信息:

“變量''不能自動導入,請閱讀ld的”--enable-auto-import“文檔獲取詳細信息。”

當一些(子)表達式訪問最終由兩個常量(Win32導入表只允許一個)給出的地址時,會發生此消息。 發生這種情況的實例包括訪問從DLL導入的結構變量的成員字段,以及將常量索引用於從DLL導入的數組變量。 任何多字變量(數組,結構體,long long等)都可能觸發此錯誤條件。 但是,無論違規導出變量的確切數據類型如何,ld都會檢測到它,發出警告並退出。

無論導出變量的數據類型如何,解決此問題的方法有多種:

一種方法是使用--enable-runtime-pseudo-reloc開關。 這會在您的客戶端代碼中為運行時環境調整引用的任務,因此此方法僅在運行時環境支持此功能時才起作用。

第二種解決方案是強制其中一個'常量'作為變量 - 即在編譯時未知且不可優化。 對於數組,有兩種可能性:a)使indexee(數組的地址)成為變量,或者b)使'常量'索引成為變量。 從而:

extern type extern_array []; extern_array [1] - > {volatile type * t = extern_array; t [1]}

要么

extern type extern_array []; extern_array [1] - > {volatile int t = 1; extern_array [t]}

對於結構體(以及大多數其他多字數據類型),唯一的選擇是使結構本身(或long long或...)變量:

extern struct s extern_struct; extern_struct.field - > {volatile struct s * t =&extern_struct; t-> field}

要么

extern long long extern_ll; extern_ll - > {volatile long long * local_ll =&extern_ll; * local_ll}

處理這一難題的第三種方法是放棄違規符號的“自動導入”,並用“__declspec(dllimport)”標記它。 然而,在實踐中,需要使用編譯時#define來指示您是否在構建DLL,構建將鏈接到DLL的客戶端代碼,還是僅建立/鏈接到靜態庫。 在選擇解決'直接地址與常量偏移'問題的各種方法之間進行選擇時,應考慮典型的真實世界用法:

原版的:

--foo.h extern int arr []; --foo.c #include“foo.h”void main(int argc,char ** argv){printf(“%d \ n”,arr [1]); }

解決方案1:

--foo.h extern int arr []; --foo.c #include“foo.h”void main(int argc,char ** argv){/ *這個解決方法是針對win32和cygwin的; 不要“優化”* / volatile int * parr = arr; 的printf(“%d \ n”個,帕爾[1]); }

解決方案2:

--foo.h / *注意:假定自動導出(no __declspec(dllexport))* / #if(defined(_WIN32)|| defined(__ CYGWIN__))&& \!(defined(FOO_BUILD_DLL)|| defined(FOO_STATIC ))#define FOO_IMPORT __declspec(dllimport)#else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c #include“foo.h”void main(int argc,char ** argv){printf(“%d \ n”,arr [1]); }

避免這個問題的第四種方法是對庫進行重新編碼,以便為有問題的變量(例如set_foo()get_foo()訪問器函數)使用函數接口而不是數據接口)。

-禁用自動導入

不要試圖將“_symbol”與來自DLL的DATAimports的“__imp__symbol”進行詭秘的鏈接。

--enable-運行偽RELOC

如果您的代碼包含--enable-auto-import部分中描述的表達式,即來自DLL的DATAimports具有非零偏移量,則此開關將創建“運行時偽重定位”向量,運行時環境可使用該向量來調整引用到您的客戶端代碼中的這些數據。

-禁用運行偽RELOC

不要為從DLL導入的非零偏移量數據創建偽重定位。 這是默認設置。

--enable-EXTRA-PE-調試

顯示與自動導入符號插入有關的其他調試信息。

--section對齊

設置截面對齊。 內存中的節將始終在該數字的倍數的地址處開始。 默認為0x1000。

- 堆棧 儲備

- 堆棧 儲備 提交

指定要用作此程序的堆棧的內存量(可選地提交)。 默認是2Mb保留,4K提交。

- 子系統 哪個

- 子系統 主要

- 子系統 主要 次要

指定您的程序將在其下執行的子系統。 其合法值是“本地”,“窗口”,“控制台”和“posix”。 您也可以選擇設置子系統版本。

重要提示:使用man命令( %man )查看特定計算機上的命令使用方式。