將msdn上vs2013的編譯器選項記載一下,我不創造文章,我只是大天然的搬運工:node
/STACK:reserve[,commit]
/STACK 選項設置堆棧的大小(以字節爲單位)。此選項僅在生成 .exe 文件時使用。git
該選項指定虛擬內存中的總的堆棧分配。默認堆棧大小爲 1 MB。連接器將指定值向上舍入爲最接近的 4 個字節。數據庫
commit 取決於操做系統所做的解釋。在 Windows NT 和 Windows 2000 中,它指定一次分配的物理內存量。提交的虛擬內存致使空間被保留在頁面文件中。更高的 commit 值在應用程序須要更多堆棧空間時可節省時間,但會增長內存需求並有可能延長啓動時間。windows
以十進制或 C 語言表示法指定 reserve 值和 commit 值。緩存
設置堆棧大小的另外一種方法是使用模塊定義 (.def) 文件中的 STACKSIZE 語句。若是二者都指定,則 STACKSIZE 重寫堆棧分配 (/STACK) 選項。可使用 EDITBIN 工具在生成 .exe 文件以後更改堆棧。app
打開此項目的「屬性頁」對話框。有關詳細信息,請參見設置 Visual C++ 項目屬性。less
單擊「連接器」文件夾。dom
單擊「系統」屬性頁。ide
修改下列任一屬性:函數
堆棧提交大小
/WX[:NO]
/WX 指示在連接器生成警告的狀況下不生成任何輸出文件。
這與編譯器的 /WX 相似(有關更多信息,請參見 /w、/Wn、/WX、/Wall、/wln、/wdn、/wen、/won(警告等級))。 可是,爲編譯指定 /WX 並不意味着 /WX 在連接階段一樣有效;必須爲每種工具都顯式指定 /WX。
默認狀況下,/WX 不起做用。 若要將連接器警告視爲錯誤,請指定 /WX。 /WX:NO 等同於不指定 /WX。
打開項目的「屬性頁」對話框。 有關詳細信息,請參見設置 Visual C++ 項目屬性。
單擊「連接器」文件夾。
單擊「命令行」屬性頁。
將該選項鍵入「附加選項」框中。
/HEAP:reserve[,commit]
/HEAP 選項設置堆的大小(以字節爲單位)。 此選項僅在生成 .exe 文件時使用。
reserve 參數指定虛擬內存中總的堆分配。 默認堆大小爲 1 MB。 連接器將指定值向上舍入爲最接近的 4 個字節。
可選 commit 參數取決於操做系統的解釋。 在 Windows NT/Windows 2000 中,它指定一次分配的物理內存的數量。 提交的虛擬內存致使空間被保留在頁面文件中。 更高的 commit 值在應用程序須要更多堆空間時可節省時間,但會增長內存需求並有可能延長啓動時間。
以十進制或 C 語言表示法指定 reserve 值和 commit 值。
經過帶 HEAPSIZE 的模塊定義文件也能夠實現該功能。
打開項目的「屬性頁」對話框。 有關詳細信息,請參見設置 Visual C++ 項目屬性。
單擊「連接器」文件夾。
單擊「系統」屬性頁。
修改「堆提交大小」屬性。
見圖1
/FORCE:[MULTIPLE|UNRESOLVED]
即便引用了符號但未定義或屢次定義符號,/FORCE 選項也通知連接器建立有效的 .exe 文件或 DLL。
/FORCE 選項能夠帶一個可選參數:
使用 /FORCE:MULTIPLE 可建立輸出文件,而無論 LINK 是否找到了符號的多個定義。
使用 /FORCE:UNRESOLVED 可建立輸出文件,而無論 LINK 是否找到未定義的符號。若是未解析入口點符號,則將忽略 /FORCE:UNRESOLVED。
不帶參數的 /FORCE 表示屢次定義和未解析。
用該選項建立的文件可能不會按預期運行。 當指定 /FORCE 選項時,連接器將不增量連接。
若是使用 /clr 編譯模塊,則 /FORCE 將不會建立映像。
打開項目的「屬性頁」對話框。 有關詳細信息,請參見設置 Visual C++ 項目屬性。
單擊「連接器」文件夾。
單擊「命令行」屬性頁。
將該選項鍵入「附加選項」框中。
/FIXED[:NO]
通知操做系統只在其首選基址加載程序。 若是首選基址不可用,則操做系統將不加載該文件。 有關詳細信息,請參閱/BASE(基址)。
/FIXED:NO 是DLL 的默認設置,/FIXED 是任何其餘項目類型的默認設置。
當指定 /FIXED 時,LINK 不生成程序中的重定位節。 在運行時,若是操做系統沒法在指定的地址加載程序,它將發出錯誤信息而且不加載該程序。
指定 /FIXED:NO 以在程序中生成重定位節。
打開項目的「屬性頁」對話框。 有關詳細信息,請參見使用項目屬性。
選擇 Linker 文件夾。
選擇「命令行」屬性頁。
鍵入選項名並在 「其餘選項」 框中設置。
報錯緣由看下面
/DYNAMICBASE[:NO]
默認狀況下,/DYNAMICBASE 處於打開狀態。
此選項修改可執行文件頭,以指示是否應在加載時對應用程序隨機從新設定基址。
Windows Vista 支持地址空間佈局隨機化功能。
打開此項目的「屬性頁」對話框。 有關更多信息,請參看如何:打開項目屬性頁。
展開「配置屬性」節點。
展開「連接器」節點。
選擇「高級」屬性頁。
修改「隨機基址」屬性。
/DEF:filename
/DEF 選項將模塊定義文件(.def)傳遞到連接器。 只能爲 LINK 指定一個 .def 文件。 有關 .def 文件的詳細信息,請參見模塊定義文件。
打開項目的「屬性頁」對話框。 有關詳細信息,請參見設置 Visual C++ 項目屬性。
單擊「連接器」文件夾。
單擊「輸入」屬性頁。
修改「模塊定義文件」屬性。
若要從開發環境內指定 .def 文件,應將它連同其餘文件一塊兒添加到項目,而後將該文件指定給 /DEF 選項。
模塊定義 (.def) 文件爲連接器提供有關被連接程序的導出、特性及其餘方面的信息。 生成 DLL 時,.def 文件最有用。 因爲存在可代替模塊定義語句使用的連接器選項,一般不須要 .def 文件。 也能夠將 __declspec(dllexport) 用做指定導出函數的手段。
在連接器階段可使用 /DEF(指定模塊定義文件)連接器選項調用 .def 文件。
若是生成的 .exe 文件沒有導出,使用 .def 文件將使輸出文件較大並下降加載速度。
有關示例,請參見使用 DEF 文件從 DLL 導出 。
.def 這裏不詳述了。。。
/DEBUG
/DEBUG 選項可爲 .exe 文件或 DLL 建立調試信息。
連接器將調試信息放在程序數據庫 (PDB) 中。 它在後面的程序生成期間更新 PDB。
爲調試建立的 .exe 文件或 DLL 包含相應 PDB 的名稱和路徑。 調試器在您調試程序時讀取嵌入的名稱並使用 PDB。 連接器使用程序的基名稱和擴展名 .pdb 命名程序數據庫,並嵌入它的建立路徑。 若要重寫該默認值,請設置 /PDB 並指定不一樣的文件名。
編譯器的僅限行號 (/Zd) 或 C7 兼容 (/Z7) 選項使編譯器將調試信息保留在 .obj 文件中。 還可使用程序數據庫 (/Zi) 編譯器選項將調試信息存儲在 .obj 文件的 PDB 中。 連接器首先在寫入 .obj 文件的絕對路徑中查找對象的 PDB,而後在包含 .obj 文件的目錄中查找。 不能指定對象的 PDB 文件名或連接器的位置。
指定 /DEBUG 時暗含 /INCREMENTAL。
/DEBUG 將 /OPT 選項的默認值從 REF 更改成 NOREF 以及從 ICF 更改成 NOICF(所以,須要顯式指定 /OPT:REF 或 /OPT:ICF)。
有關 .PDB 和 .DBG 文件的更多信息,請參見知識庫文章 Q121366,INFO: PDB and DBG Files - What They Are and How They Work。 可在 MSDN 庫 或 http://search.support.microsoft.com 上找到知識庫文章。
沒法建立包含調試信息的 .exe 或 .dll。 調試信息始終放在 .pdb 文件中。
打開項目的「屬性頁」對話框。 有關詳細信息,請參見設置 Visual C++ 項目屬性。
單擊「連接器」文件夾。
單擊「調試」屬性頁。
修改「生成調試信息」屬性。
/OPT:{REF | NOREF} /OPT:{ICF[=iterations] | NOICF} /OPT:{LBR | NOLBR}
/ALLOWBIND[:NO]
/ALLOWBIND:NO 在 DLL 的標頭中設置一個位,向 Bind.exe 指示不容許綁定圖像。 若是 DLL 已經進行數字簽名(綁定使簽名無效),可能不須要綁定 DLL。
可使用 EDITBIN 實用工具的 /ALLOWBIND 選項編輯 /ALLOWBIND 功能的現有 DLL。
/DELAYSIGN[:NO]
若是隻想將公鑰放入程序集中,則應使用 /DELAYSIGN。 默認值爲 /DELAYSIGN:NO。
若是不與 /KEYFILE 或 /KEYCONTAINER 一塊兒使用,則 /DELAYSIGN 選項沒有任何做用。
若是要求徹底簽名的程序集,編譯器將對包含清單(程序集元數據)的文件進行散列處理,並用私鑰對該散列數據進行簽名。 產生的數字簽名存儲在包含清單的文件中。 若是程序集的簽名延遲,則連接器將不會計算和存儲簽名,但會在文件中保留空間以便之後添加簽名。
例如,使用 /DELAYSIGN 將容許測試人員把程序集放入全局緩存中。 測試完成後,能夠經過將私鑰放入程序集中對程序集進行徹底簽名。
有關對程序集簽名的更多信息,請參見 強名稱程序集(程序集簽名)(C++/CLI) 和 延遲爲程序集簽名。
其餘影響程序集生成的連接器選項爲:
打開項目的「屬性頁」對話框。 有關詳細信息,請參見設置 Visual C++ 項目屬性。
單擊「連接器」文件夾。
單擊「命令行」屬性頁。
將該選項鍵入「附加選項」框中。
涉及更多知識點,先押後待續。。。。。
/DELAYLOAD:dllname
/DELAYLOAD 選項致使 dllname 指定的 DLL 只能在程序第一次調用該 DLL 中的函數時加載。 有關詳細信息,請參閱 連接器的延遲加載 DLL 支持。 你能夠根據須要屢次使用此選項,以便指定已選的多個 DLL。 當連接你的程序時,你必須使用 Delayimp.lib,或者也能夠實現你本身的延遲加載 Helper 函數。
/DELAY 選項爲每一個延遲加載的 DLL 指定綁定和加載選項。
打開項目的「屬性頁」對話框。 有關詳細信息,請參閱 使用項目屬性。
在「連接器」文件夾中,選擇「輸入」屬性頁。
修改「延遲加載的 DLL」屬性。
涉及更多知識點,先押後待續。。。。。
/DELAY:UNLOAD /DELAY:NOBIND
/DELAY 選項控制 DLL 的延遲加載:
UNLOAD 限定符通知延遲加載 Helper 函數支持 DLL 的顯式卸載。 導入地址表 (IAT) 被重置爲其原始形式,從而使 IAT 指針無效並致使它們被覆蓋。
若是不選擇 UNLOAD,任何對 FUnloadDelayLoadedDLL 調用都將失敗。
NOBIND 限定符通知連接器不要在最終圖像中包含可綁定的 IAT。 默認值是爲延遲加載的 DLL 建立可綁定的 IAT。 沒法靜態綁定生成的圖像。 (能夠在執行以前靜態綁定包含可綁定 IAT 的圖像。)請參閱 /BIND。
若是綁定了 DLL,則 Helper 函數將嘗試使用綁定信息,而不是對每一個引用的導入調用 GetProcAddress。 若是時間戳或首選地址與加載的 DLL 的時間戳或首選地址不匹配,則 Helper 函數將假定綁定的 IAT 已通過期並繼續執行,就像綁定的 IAT 不存在同樣。
NOBIND 致使程序圖像比較大,可是能夠加快 DLL 的加載時間。 若是從不打算綁定 DLL,則 NOBIND 將禁止生成綁定的 IAT。
若要指定 DLL 延遲加載,請使用 /DELAYLOAD 選項。
打開項目的「屬性頁」對話框。 有關信息,請參見使用項目屬性。
依次展開「配置屬性」、「連接器」,而後選擇「高級」。
修改「延遲加載的 DLL」屬性。