首頁  >  文章  >  運維  >  Win32 SDK基礎(二)之關於cl.exe和link.exe編譯和連接程式的詳解(圖)

Win32 SDK基礎(二)之關於cl.exe和link.exe編譯和連接程式的詳解(圖)

黄舟
黄舟原創
2017-06-06 09:36:593481瀏覽

從程式的編譯過程說起

#    上一文我們介紹了windows系統下面程式的分類、編譯器、連接器、常用頭檔、函式庫檔案等知識。本文再談程式的編譯過程。

相信大家都知道原始碼的編譯過程共分為兩個步驟:一是編譯過程,主要工作是把我們的原始碼翻譯成中間文件,這在windows中就是cl.exe的作用,它將我們的.c檔案或 .cpp檔案翻譯成中間.obj檔案;二是連接過程,主要工作是將多種中間檔案、庫檔案連接產生可執行文件,這在windows中就是link.exe的作用,它將##.obj檔案和庫檔案等連結成exe程式。

本文主要教大家擺脫VSIDE,用命令列的方式用 #cl.exelink.exe編譯和連結程式。

寫我們的Test.c檔案

    首先我們新建一個test.txt文件,然後重新命名為text.c#,在該文件中我們填寫如下程式碼:

#include "windows.h"
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,  
                     _In_opt_ HINSTANCE hPrevInstance,  
                     _In_ LPWSTR    lpCmdLine,  
                     _In_ int       nCmdShow)   
{
  MessageBox(NULL,"Hello Win32","sdk",MB_ABORTRETRYIGNORE|MB_ICONERROR);
  return 0;
}

        #include "windows.h"

匯入了我們所需要所有windows系統下必須的頭檔。然後我們引入了windows視窗程式的主函數#wWinMain##。這裡簡單解釋下Winmain各個形參的作用:hInstance是目前程式的實例句柄,也就是目前程式所在的記憶體的位置;hPrevInstance目前程式前一個實例句柄,目前已經廢棄;lpCmdLine是命令列參數,就是我們以命令列的方式執行程式時可以附帶一些字串作為參數;nCmdShow是視窗顯示方式,最大化、最小化那種。我們在主函數中呼叫了MessageBox定義了一個模式對話框,如果編譯成功,我們執行程式後將會彈出一個對話框。

現在

Test.c檔案已經寫完成,我們接下來要做的就是分別編譯和連結檔案。

編譯Test.c

    我們將開啟

windowscmd命令列工具,然後切換到我們目前的工作目錄,使用以下命令編譯Test.c」檔案:        Cl.exe /c test.c

#

    編譯完成後會在工作目錄下產生test.obj中間檔案:

    如果你的命令列提示找不到cl.exe命令等諸如此類的信息,相信你應該明白這是環境變數中沒有引入cl.exe所在的目錄,我們可以先加入該環境變數或使用全路徑的方式進行引入。如果你產生了test.obj檔說明編譯過程完成了,我們可以開始連線過程了。

四、連結產生test.exe

#    接下來我們執行下面的指令產生執行檔:

    Link.exe test.obj user32.lib

## 

 

        User32.lib

這個函式庫我們在前一文中曾經提到過,它包含了所欲的使用者介面、訊息相關的API,我們的需要呼叫的MessageBox##就在這個函式庫裡面定義,如果不出意外,你的工作目錄下應該會產生test.exe這個可執行檔:


    雙擊這個

exe,彈出了我們定義的對話框:


############################# ######### ######        OK####,試驗結束。我們完全脫離了######VS######帶有介面的######IDE#######產生了一個自訂的對話框,是不是很神奇?這裡應該會有小岳岳那賤賤的表情。 。 。 ######### ###

以上是Win32 SDK基礎(二)之關於cl.exe和link.exe編譯和連接程式的詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn