使用cl.exe和linker.exe連線程式
使用cl.exe和linker.exe連線程式
一、環境配置
1、在電腦桌面,右擊此電腦,選擇屬性進入控制皮膚主頁,點選高階系統設定。
2、點選環境變數進行設定
3、雙擊path變數
輸入自己cl.exe檔案所在位置
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx86\x86
如果找不到可以在檔案中進行搜尋。
4、新增其他環境變數
在變數名在變數名處填:LIB
在變數值處填:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\lib\x64
再次點選新建,在變數名處填:INCLUDE
在變數值處填:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include
做完這一切後,請點選確定,讓系統配置生效。這時編譯器可以找到iostream等基本的標頭檔案,但因為缺少一些庫還是不能執行。
找到windows kits
在剛剛建立的環境變數LIB中編輯文字,新增以下路徑:
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt_enclave\x64
在剛剛建立的環境變數INCLUDE中編輯文字,新增以下路徑:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt
在dos裡輸入cl如果出現下圖所示就表示配置成功
5、建立一個簡單檔案檢查是否可用
建立一個helloworld 控制檯程式並在資料夾中用cmd來編譯並執行它
表示編譯成功,並且資料夾中出現C1.obj檔案
二、建立一個WIN32程式並使用cl.exe 和linker.exe使其編譯並執行
1、建立一個空的視窗專案並加入檔案寫入程式碼
2、儲存所寫程式碼檔案不編譯在檔案中用cl.exe編譯
檔案中出現win1.obj檔案
3、使用linker.exe連線哭檔案並生成win1.exe檔案
找到輸入附加依賴項
找到需要的依賴庫後再dos中輸入正確命令
link win1.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
正確後會生成win1.exe檔案
執行win1.exe
三、建立一個MFC程式並使用cl.exe 和linker.exe使其編譯並執行
1、建立一個MFC程式
2、分別編譯三個檔案
編譯第一個檔案的時候報錯
找到該檔案的目錄結尾為include所以把該地址放到INCLUDE環境變數中
重新開啟cmd編譯剛剛的檔案
生成了3個obj檔案。
使用link命令將三個檔案連結起來
無法開啟nafxc.lib,所以我們需要將這個檔案的路徑也新增到環境變數中
使用link會報一個錯
在MFC_1.cpp的末尾新增如下程式碼
extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow);
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow)
#pragma warning(suppress: 4985)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
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;
}
重新編譯一遍MFC_1.cpp然後進行連結
連結成功並且生成了MFC_1.exe
執行結果
四、參考資料
相關文章
- 長連線和短連線的使用
- 連線和半連線
- Socket連線和Http連線HTTP
- 長連線和短連線
- 左連線和右連線
- sql 內連線和外連線SQL
- 連線池和連線數詳解
- http的長連線和短連線HTTP
- LINUX 硬連線和軟連線Linux
- Oracle的左連線和右連線Oracle
- 交叉線和直連線
- 深入淺出SQL之左連線、右連線和全連線SQL
- gdbserver連線Ubuntu除錯程式(使用串列埠)ServerUbuntu除錯串列埠
- HBase的安裝配置和使用Java連線Java
- DBCP 資料連線池的配置和使用
- 區分socket連線和tcp/ip連線TCP
- 等值連線和自然連線的區別
- SQL中的左連線和右連線SQL
- proxool連線池如何使用SSL方式連線?
- 學習連連看 連線線之謎+道具的使用
- 用jsonrpc2連線gtk程式和go程式JSONRPCGo
- JAVA之長連線、短連線和心跳包Java
- HTTP非持續連線和持續連線HTTP
- scrapy軟連線失效和pip軟連線失效
- HTTP長連線和短連線原理淺析HTTP
- 使用微信小程式連線到 MQTT 雲服務微信小程式MQQT
- 程式設計使用WMI 控制連線屬性 (轉)程式設計
- 使用SSMS連線和查詢 SQL Server 例項SSMSQLServer
- 排序和表連線排序
- exists和連線方式
- 使用pyMySql 連線mysqlMySql
- php使用長連線PHP
- mysql連線池爆滿,釋放程式長連線殭屍程式MySql
- 1.6.3.3. 本地連線和安全的遠端連線
- 12、Swoole 中 TCP、UDP 和長連線、短連線TCPUDP
- LAN連線和WAN連線有什麼區別?
- Oracle專有(dedicated)連線和共享(shared)連線Oracle
- 使用iwctl連線無線網路