小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

深入探究VC

 quasiceo 2016-10-07

深入探究VC —— 鏈接器link.exe(4)【轉(zhuǎn)】http://blog.csdn.net/wangningyu/article/details/4849452

在程序編譯完成后,生成的文件是以.obj為擴展名的對象文件,link.exe是將這些對象文件與庫鏈接起來以創(chuàng)建可執(zhí)行文件或動態(tài)鏈接庫文件的工具。

 

link.exe的輸入文件包括obj文件、lib文件、exp文件、def文件、res文件、txt文件、ilk文件等等,而輸出的文件一般是exe文件、dll文件、sys文件等可執(zhí)行程序文件。

 

1、命令行參數(shù)

link.exe運行參數(shù)如下:

LINK [options] files

參數(shù)包括選項和文件名,選項和文件名可按任意順序指定。link會首先處理選項,然后是文件。各參數(shù)間必須使用一個或多個空格或制表符來分隔。

 

2、輸入文件

參數(shù)中的files是指鏈接器的輸入文件。用戶可以使用文件名指定絕對路徑或相對路徑,可在文件名中使用通配符。如果用戶指定的文件名沒有擴展名,則默認假設(shè)擴展名為obj。link.exe對文件格式的判斷不是根據(jù)文件擴展名,而是判斷文件的內(nèi)容

比如之前【深入探究VC —— 編譯器cl.exe(1)】代碼中:

 

  1. // File   Name: Hello.c     
  2. // Description: First Win32 Application     
  3. // by Koma 2009-11-18 22:05     
  4.     
  5. #include <windows.h>     
  6. #pragma comment(lib,"user32.lib")     
  7.     
  8. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pszCmdLine, int cmdShow)     
  9. {     
  10.     MessageBox(NULL,"Hello World !","Test",MB_OK);     
  11.     return 0;     
  12. }  

 

 

Hello.c完成編譯后會生成Hello.obj文件,然后將Hello.obj與系統(tǒng)庫文件鏈接起來,最終生成可執(zhí)行文件。命令行參數(shù)為:

link Hello.obj /subsystem:windows

 

注意,在之前【深入探究VC —— 編譯器cl.exe(1)】代碼中有這樣一行代碼:

 

  1. #pragma comment(lib,"user32.lib")    

 

如果在輸入文件中指明了user32.lib,那么這一行是沒有必要的。但是如果將參數(shù)里這一段鏈接user32.lib去掉,而代碼文件中又不包括 上面這一行,則編譯器會報錯。

 

如果編譯器報告錯誤“LNK2019:無法解析的外部符號......”,那么通常是由于沒有將鏈接這些符號所需要的輸入庫文件加入到輸入文件參數(shù)中,比如調(diào)用MessageBox API就必須在鏈接時輸入user32.lib。

 

3、鏈接器選項

選項前需加“選項說明符”(一個短劃線‘-’或一個正斜杠‘/’),然后是該選項的名稱。如果選項帶參數(shù),參數(shù)在冒號(:)后指定選項的參數(shù)。如果參數(shù)是數(shù)值,可以使用十進制、或C語言表示法。與編譯器cl.exe不同,鏈接器的選項名及其關(guān)鍵字或文件名參數(shù)不區(qū)分大小寫,但用作參數(shù)的標識符區(qū)分大小字書。

 

選項中很多涉及Windows可執(zhí)行文件的格式問題,比如節(jié)、導入表、導出表、基地址等,以及Windows可執(zhí)行文件中EXE文件、DLL文件的區(qū)別與作用、可執(zhí)行文件的加載以及API函數(shù)動態(tài)鏈接過程。(Windows可執(zhí)行文件編譯與鏈接的內(nèi)部原理,請自行查閱相關(guān)資料吧?。?/p>

 

選項

用途

@

指定響應文件

/ALIGN

指定每一節(jié)的對齊方式

/ALLOWBIND

指定 DLL 不能綁定

/ALLOWISOLATION

指定清單查找的行為。

/ASSEMBLYDEBUG

將 DebuggableAttribute 添加到托管映像中。

/ASSEMBLYLINKRESOURCE

創(chuàng)建指向托管資源的鏈接。

/ASSEMBLYMODULE

指定應將 Microsoft 中間語言 (MSIL) 模塊導入到程序集中

/ASSEMBLYRESOURCE

將托管資源文件嵌入到程序集

/BASE

為程序設(shè)置基址

/CLRIMAGETYPE

設(shè)置 CLR 映像的類型(IJW 映像、純映像或安全映像)。

/CLRSUPPORTLASTERROR

保留通過 P/Invoke 機制調(diào)用的函數(shù)的上一個錯誤代碼。

/CLRTHREADATTRIBUTE

指定要應用于 CLR 程序入口點的線程屬性。

/CLRUNMANAGEDCODECHECK

/CLRUNMANAGEDCODECHECK 指定鏈接器是否將 SuppressUnmanagedCodeSecurity 屬性應用于鏈接器生成的、從托管代碼調(diào)用到本機 DLL 中的 PInvoke 存根 (stub)。

/DEBUG

創(chuàng)建調(diào)試信息

/DEF

將模塊定義 (.def) 文件傳遞到鏈接器

/DEFAULTLIB

在解析外部引用時搜索指定的庫

/DELAY

控制 DLL 的延遲加載

/DELAYLOAD

導致延遲加載指定的 DLL

/DELAYSIGN

對程序集進行部分簽名。

/DLL

生成 DLL

/DRIVER

創(chuàng)建 Windows NT 核心模式驅(qū)動程序

/DYNAMICBASE

使用 Windows Vista 的地址空間布局隨機化 (ASLR) 功能,指定是否生成可在加載時隨機重新設(shè)定基址的可執(zhí)行文件映像。

/ENTRY

設(shè)置起始地址

/errorReport

向 Microsoft 報告內(nèi)部鏈接器錯誤。

/EXPORT

導出函數(shù)

/FIXED

創(chuàng)建只能在其首選基址加載的程序

/FORCE

強制完成鏈接,即使符號無法解析或已定義多次

/FUNCTIONPADMIN

創(chuàng)建可熱修補的映像。

/HEAP

設(shè)置堆的大?。ㄒ宰止?jié)為單位)

/IDLOUT

指定 .idl 文件和其他 MIDL 輸出文件的名稱

/IGNOREIDL

防止將屬性信息處理到 .idl 文件中

/IMPLIB

重寫默認的導入庫名

/INCLUDE

強制符號引用

/INCREMENTAL

控制增量鏈接

/KEYCONTAINER

指定用來為程序集簽名的密鑰容器。

/KEYFILE

指定用來為程序集簽名的密鑰或密鑰對。

/LARGEADDRESSAWARE

通知編譯器應用程序支持大于 2 GB 的地址

/LIBPATH

允許用戶重寫環(huán)境庫路徑

/LTCG

指定鏈接時代碼生成

/MACHINE

指定目標平臺

/MANIFEST

創(chuàng)建并行清單文件。

/MANIFESTDEPENDENCY

在清單文件中指定 <dependentAssembly> 節(jié)。

/MANIFESTFILE(命名清單文件)

更改清單文件的默認名稱。

/MANIFESTUAC

指定是否將用戶帳戶控制 (UAC) 信息嵌入到程序清單中。

/MAP

創(chuàng)建映射文件

/MAPINFO

包括映射文件中的指定信息

/MERGE

合并節(jié)

/MIDL

指定 MIDL 命令行選項

/NOASSEMBLY

取消創(chuàng)建 .NET Framework 程序集

/NODEFAULTLIB

在解析外部引用時忽略所有(或指定的)默認庫

/NOENTRY

創(chuàng)建純資源 DLL

/NOLOGO

取消顯示啟動版權(quán)標志

/NXCOMPAT

將可執(zhí)行文件標記為經(jīng)測試與 Windows 數(shù)據(jù)執(zhí)行保護功能兼容。

/OPT

控制 LINK 優(yōu)化

/ORDER

按預先確定的順序?qū)?COMDAT 放置到圖像中

/OUT

指定輸出文件名

/PDB

創(chuàng)建程序數(shù)據(jù)庫 (PDB) 文件

/PDBSTRIPPED

創(chuàng)建沒有私有符號的程序數(shù)據(jù)庫 (PDB) 文件

/PGD

為按配置文件優(yōu)化指定 .pgd 文件。

/PROFILE

生成一個可與“性能工具”探查器結(jié)合使用的輸出文件。

/RELEASE

在 .exe 文件頭中設(shè)置校驗和

/SAFESEH

指定圖像將包含安全異常處理程序表。

/SECTION

重寫節(jié)的屬性

/STACK

設(shè)置堆棧的大?。ㄒ宰止?jié)為單位)

/STUB

將 MS-DOS 存根 (stub) 程序附加到 Win32 程序

/SUBSYSTEM

通知操作系統(tǒng)如何運行 .exe 文件

/SWAPRUN

通知操作系統(tǒng)在運行鏈接器輸出之前將其復制到一個交換文件

/TLBID

允許指定鏈接器生成的類型庫的資源 ID

/TLBOUT

指定 .tlb 文件和其他 MIDL 輸出文件的名稱

/TSAWARE

創(chuàng)建專為在終端服務器下運行而設(shè)計的應用程序

/VERBOSE

打印鏈接器進度消息

/VERSION

分配版本號

/WX

將鏈接器警告視為錯誤。

 

 

4、參考資料

微軟官方MSDN幫助文檔

 

有關(guān)更多信息,請參見編譯器控制的 LINK 選項、 設(shè)置鏈接器選項有關(guān)生成的常見問題.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多