<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    深入探究VC ―― 鏈接器link.exe(4)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

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

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

    1、命令行參數

    link.exe運行參數如下:

    LINK [options] files

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

    2、輸入文件

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

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

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

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

    link Hello.obj /subsystem:windows

     

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

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

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


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

    3、鏈接器選項

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

    選項中很多涉及Windows可執行文件的格式問題,比如節、導入表、導出表、基地址等,以及Windows可執行文件中EXE文件、DLL文件的區別與作用、可執行文件的加載以及API函數動態鏈接過程。(Windows可執行文件編譯與鏈接的內部原理,請自行查閱相關資料吧!)

    選項
     用途
     
    @
     指定響應文件
     
    /ALIGN
     指定每一節的對齊方式
     
    /ALLOWBIND
     指定 DLL 不能綁定
     
    /ALLOWISOLATION
     指定清單查找的行為。
     
    /ASSEMBLYDEBUG
     將 DebuggableAttribute 添加到托管映像中。
     
    /ASSEMBLYLINKRESOURCE
     創建指向托管資源的鏈接。
     
    /ASSEMBLYMODULE
     指定應將 Microsoft 中間語言 (MSIL) 模塊導入到程序集中
     
    /ASSEMBLYRESOURCE
     將托管資源文件嵌入到程序集
     
    /BASE
     為程序設置基址
     
    /CLRIMAGETYPE
     設置 CLR 映像的類型(IJW 映像、純映像或安全映像)。
     
    /CLRSUPPORTLASTERROR
     保留通過 P/Invoke 機制調用的函數的上一個錯誤代碼。
     
    /CLRTHREADATTRIBUTE
     指定要應用于 CLR 程序入口點的線程屬性。
     
    /CLRUNMANAGEDCODECHECK
     /CLRUNMANAGEDCODECHECK 指定鏈接器是否將 SuppressUnmanagedCodeSecurity 屬性應用于鏈接器生成的、從托管代碼調用到本機 DLL 中的 PInvoke 存根 (stub)。
     
    /DEBUG
     創建調試信息
     
    /DEF
     將模塊定義 (.def) 文件傳遞到鏈接器
     
    /DEFAULTLIB
     在解析外部引用時搜索指定的庫
     
    /DELAY
     控制 DLL 的延遲加載
     
    /DELAYLOAD
     導致延遲加載指定的 DLL
     
    /DELAYSIGN
     對程序集進行部分簽名。
     
    /DLL
     生成 DLL
     
    /DRIVER
     創建 Windows NT 核心模式驅動程序
     
    /DYNAMICBASE
     使用 Windows Vista 的地址空間布局隨機化 (ASLR) 功能,指定是否生成可在加載時隨機重新設定基址的可執行文件映像。
     
    /ENTRY
     設置起始地址
     
    /errorReport
     向 Microsoft 報告內部鏈接器錯誤。
     
    /EXPORT
     導出函數
     
    /FIXED
     創建只能在其首選基址加載的程序
     
    /FORCE
     強制完成鏈接,即使符號無法解析或已定義多次
     
    /FUNCTIONPADMIN
     創建可熱修補的映像。
     
    /HEAP
     設置堆的大小(以字節為單位)
     
    /IDLOUT
     指定 .idl 文件和其他 MIDL 輸出文件的名稱
     
    /IGNOREIDL
     防止將屬性信息處理到 .idl 文件中
     
    /IMPLIB
     重寫默認的導入庫名
     
    /INCLUDE
     強制符號引用
     
    /INCREMENTAL
     控制增量鏈接
     
    /KEYCONTAINER
     指定用來為程序集簽名的密鑰容器。
     
    /KEYFILE
     指定用來為程序集簽名的密鑰或密鑰對。
     
    /LARGEADDRESSAWARE
     通知編譯器應用程序支持大于 2 GB 的地址
     
    /LIBPATH
     允許用戶重寫環境庫路徑
     
    /LTCG
     指定鏈接時代碼生成
     
    /MACHINE
     指定目標平臺
     
    /MANIFEST
     創建并行清單文件。
     
    /MANIFESTDEPENDENCY
     在清單文件中指定 <dependentAssembly> 節。
     
    /MANIFESTFILE(命名清單文件)
     更改清單文件的默認名稱。
     
    /MANIFESTUAC
     指定是否將用戶帳戶控制 (UAC) 信息嵌入到程序清單中。
     
    /MAP
     創建映射文件
     
    /MAPINFO
     包括映射文件中的指定信息
     
    /MERGE
     合并節
     
    /MIDL
     指定 MIDL 命令行選項
     
    /NOASSEMBLY
     取消創建 .NET Framework 程序集
     
    /NODEFAULTLIB
     在解析外部引用時忽略所有(或指定的)默認庫
     
    /NOENTRY
     創建純資源 DLL
     
    /NOLOGO
     取消顯示啟動版權標志
     
    /NXCOMPAT
     將可執行文件標記為經測試與 Windows 數據執行保護功能兼容。
     
    /OPT
     控制 LINK 優化
     
    /ORDER
     按預先確定的順序將 COMDAT 放置到圖像中
     
    /OUT
     指定輸出文件名
     
    /PDB
     創建程序數據庫 (PDB) 文件
     
    /PDBSTRIPPED
     創建沒有私有符號的程序數據庫 (PDB) 文件
     
    /PGD
     為按配置文件優化指定 .pgd 文件。
     
    /PROFILE
     生成一個可與“性能工具”探查器結合使用的輸出文件。
     
    /RELEASE
     在 .exe 文件頭中設置校驗和
     
    /SAFESEH
     指定圖像將包含安全異常處理程序表。
     
    /SECTION
     重寫節的屬性
     
    /STACK
     設置堆棧的大小(以字節為單位)
     
    /STUB
     將 MS-DOS 存根 (stub) 程序附加到 Win32 程序
     
    /SUBSYSTEM
     通知操作系統如何運行 .exe 文件
     
    /SWAPRUN
     通知操作系統在運行鏈接器輸出之前將其復制到一個交換文件
     
    /TLBID
     允許指定鏈接器生成的類型庫的資源 ID
     
    /TLBOUT
     指定 .tlb 文件和其他 MIDL 輸出文件的名稱
     
    /TSAWARE
     創建專為在終端服務器下運行而設計的應用程序
     
    /VERBOSE
     打印鏈接器進度消息
     
    /VERSION
     分配版本號
     
    /WX
     將鏈接器警告視為錯誤。
     


    4、參考資料

    微軟官方MSDN幫助文檔

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

     

    本文來自CSDN博客,轉載請標明出處:http://www.cnblogs.com/lidabo/admin/file:///C:/Documents%20and%20Settings/Administrator/桌面/MFC-20100806文章/MFC-20100806文章/深入探究VC%20——%20鏈接器link_exe(4)%20-%20zxzqwq2009的專欄%20-%20CSDN博客.htm

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全