使用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
- 用jsonrpc2連線gtk程式和go程式JSONRPCGo
- sql 內連線和外連線SQL
- gdbserver連線Ubuntu除錯程式(使用串列埠)ServerUbuntu除錯串列埠
- http的長連線和短連線HTTP
- 連線池和連線數詳解
- 呼叫Visual Studio的cl.exe編譯C/C++程式編譯C++
- 5. Oracle連線和使用——5.1. sqlplusOracleSQL
- 使用Python程式碼遠端連線伺服器Python伺服器
- 使用SSMS連線和查詢 SQL Server 例項SSMSQLServer
- JAVA之長連線、短連線和心跳包Java
- scrapy軟連線失效和pip軟連線失效
- HTTP非持續連線和持續連線HTTP
- 使用telnet連線redisRedis
- 使用pyMySql 連線mysqlMySql
- .net8 winform程式使用EntityFrameworkCore連線資料庫ORMFramework資料庫
- 使用微信小程式連線到 MQTT 雲服務微信小程式MQQT
- spring 簡單的使用 Hikari連線池 和 jdbc連線mysql 的一個簡單例子SpringJDBCMySql單例
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- 5. Oracle連線和使用——5.2. PL/SQL DeveloperOracleSQLDeveloper
- 【JDBC】使用OracleDataSource建立連線池用於連線OracleJDBCOracle
- 12、Swoole 中 TCP、UDP 和長連線、短連線TCPUDP
- 1.6.3.3. 本地連線和安全的遠端連線
- LAN連線和WAN連線有什麼區別?
- 使用iwctl連線無線網路
- Windows遠端連線伺服器使用jupyter跑tensorflow程式Windows伺服器
- 使用screen讓關閉ssh連線時不關閉程式
- socketserver實現多使用者連線簡單程式碼Server
- 【技術乾貨】程式碼示例:使用 Apache Flink 連線 TDengineApache
- 【技術乾貨】程式碼示例:使用 Apache Spark 連線 TDengineApacheSpark
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- windwos 使用telnet 連線 redisRedis
- 使用mysqlclient庫連線mysqlMySqlclient
- Android 使用 Kotlin 連線 MQTTAndroidKotlinMQQT
- 菜鳥學網路之 —— 長連線和短連線
- win10遠端桌面連線,使用正確的使用者名稱和密碼仍然不能成功連線Win10密碼