# 上一文我們介紹了windows系統下面程式的分類、編譯器、連接器、常用頭檔、函式庫檔案等知識。本文再談程式的編譯過程。
相信大家都知道原始碼的編譯過程共分為兩個步驟:一是編譯過程,主要工作是把我們的原始碼翻譯成中間文件,這在windows中就是cl.exe的作用,它將我們的.c檔案或 .cpp檔案翻譯成中間.obj檔案;二是連接過程,主要工作是將多種中間檔案、庫檔案連接產生可執行文件,這在windows中就是link.exe的作用,它將##.obj檔案和庫檔案等連結成exe程式。
本文主要教大家擺脫VS的IDE,用命令列的方式用 #cl.exe和link.exe編譯和連結程式。
首先我們新建一個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檔案已經寫完成,我們接下來要做的就是分別編譯和連結檔案。
windows的cmd命令列工具,然後切換到我們目前的工作目錄,使用以下命令編譯Test.c」檔案: Cl.exe /c test.c
#
#
編譯完成後會在工作目錄下產生test.obj中間檔案:
如果你的命令列提示找不到cl.exe命令等諸如此類的信息,相信你應該明白這是環境變數中沒有引入cl.exe所在的目錄,我們可以先加入該環境變數或使用全路徑的方式進行引入。如果你產生了test.obj檔說明編譯過程完成了,我們可以開始連線過程了。
# 接下來我們執行下面的指令產生執行檔:
Link.exe test.obj user32.lib
## User32.lib這個函式庫我們在前一文中曾經提到過,它包含了所欲的使用者介面、訊息相關的API,我們的需要呼叫的MessageBox##就在這個函式庫裡面定義,如果不出意外,你的工作目錄下應該會產生test.exe這個可執行檔:
exe,彈出了我們定義的對話框:
############################# ######### ###### OK####,試驗結束。我們完全脫離了######VS######帶有介面的######IDE#######產生了一個自訂的對話框,是不是很神奇?這裡應該會有小岳岳那賤賤的表情。 。 。 ######### ###
以上是Win32 SDK基礎(二)之關於cl.exe和link.exe編譯和連接程式的詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!