天天看點

使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結

使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式(入門練習)

  • 實驗内容
  • 實驗環境
  • 環境配置
  • 實驗步驟
    • 1.指令行工具cl.exe,linker.exe編譯連結Window API程式
    • 2.指令行工具cl.exe,linker.exe編譯連結MFC程式
  • 總結

實驗内容

Visual Studio 2017的指令行工具cl.exe,linker.exe等編譯連接配接windows API程式和MFC程式。

windows API程式部落格連結

MFC程式連結

實驗環境

Visual Studio 2017

環境配置

  1. 進入環境變量編輯界面

    控制台 → 系統 → 進階系統設定 → 環境變量

    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  2. 在上述界面中找到path并進行編輯
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  3. 在電腦中找到cl.exe檔案,并複制其所在目錄

    推薦使用Everything軟體進行搜素

    D:\SOFTWARE\VS\VS\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x86

    點選建立,并将複制的目錄粘貼上,然後點選确定即可

    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  4. 再次編輯環境變量。在使用者變量内分别建立LIB與INCLUDE變量。
目錄根據個人軟體安裝位置而變
  1. 建立LIB環境變量
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  2. 建立INCLUDE環境變量
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  3. 在cmd控制台中輸入cl,若出現以下情況,則說明已經配置好環境
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結

實驗步驟

1.指令行工具cl.exe,linker.exe編譯連結Window API程式

Windows API程式部落格連結

  1. 在Windows API檔案目錄下運作cmd,并使用cl.exe編譯Windows API程式
    cl /c /EHsc Test.cpp
               
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  2. 使用指令linker.exe
    link Test.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
               
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  3. 輸出結果如下
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結

2.指令行工具cl.exe,linker.exe編譯連結MFC程式

MFC程式連結

MFC程式下有如下檔案

使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結

Visual Studio 2017中沒有可識别的程式入口,如果不重新定義則會出現錯誤:必須定義入口點。

定義完入口點後即可編譯3個源檔案

  1. 在1_MFC.cpp末尾添加以下函數作為入口點
    int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    	_In_ LPTSTR lpCmdLine, int nCmdShow)
    {
    	ASSERT(hPrevInstance == NULL);
    
    	int nReturnCode = -1;
    	CWinThread* pThread = AfxGetThread();
    	CWinApp* pApp = AfxGetApp();
    
    	// AFX internal initialization
    	if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
    		goto InitFailure;
    
    	// App global initializations (rare)
    	if (pApp != NULL && !pApp->InitApplication())
    		goto InitFailure;
    
    	// Perform specific initializations
    	if (!pThread->InitInstance())
    	{
    		if (pThread->m_pMainWnd != NULL)
    		{
    			TRACE(traceAppMsg, 0, "Warning: Destroying non-NULL m_pMainWnd\n");
    			pThread->m_pMainWnd->DestroyWindow();
    		}
    		nReturnCode = pThread->ExitInstance();
    		goto InitFailure;
    	}
    	nReturnCode = pThread->Run();
    
    InitFailure:
    #ifdef _DEBUG
    	// Check for missing AfxLockTempMap calls
    	if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
    	{
    		TRACE(traceAppMsg, 0, "Warning: Temp map lock count non-zero (%ld).\n",
    			AfxGetModuleThreadState()->m_nTempMapLock);
    	}
    	AfxLockTempMaps();
    	AfxUnlockTempMaps(-1);
    #endif
    
    	AfxWinTerm();
    	return nReturnCode;
    }
               
  2. 在工程目錄下打開cmd并使用cl.exe編譯1_MFC.cpp
    cl /c /EHsc 1_MFC.cpp
               
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
    出現無法打開檔案錯誤是因為環境變量未添加完畢。
  3. 在檔案中找到afxwin.h檔案目錄,并将其所在目錄複制下來,添加到INCLUDE環境變量中
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  4. 再次編譯1_MFC.cpp與剩下兩個源檔案
    cl /c /EHsc 1_MFC.cpp
               
    cl /c /EHsc 1_MFCDlg.cpp
               
    cl /c /EHsc pch.cpp
               
    出現以下畫面則表示成功編譯
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
    并可以工程目錄下看到多出來的三個.obj檔案
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  5. 使用link連接配接上述3個.obj檔案
    link 1_MFC.obj 1_MFCDlg.obj pch.obj
               
    此時出現錯誤
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
    缺少nafxcw.lib檔案,該錯誤的解決方式與第3步相同,這裡不再說明
  6. 解決錯誤後再次link連接配接3個.obj檔案
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結
  7. 輸出結果
    使用VS2017的指令行工具cl.exe、linker.exe編譯連接配接windows API程式和MFC程式實驗内容實驗環境環境配置實驗步驟總結

總結

cl.exe與linker.exe本身并不複雜,環境變量的配置才是本實驗的難點。在建立環境變量的時候要注意區分x64與x86,如果在此出錯,那麼在控制台使用cl時會出現沖突錯誤。

由于WIN10檔案中搜素檔案非常慢,且不便檢視目錄與檔案類型。建議使用Everything軟體進行檔案的查找。