使用cl.exe和linker.exe连接程序

本文详细介绍了如何配置环境以使用cl.exe和linker.exe编译连接WIN32和MFC程序。从设置环境变量到创建和运行程序,包括添加必要的库路径,解决编译和链接过程中遇到的问题,最后成功运行程序。
摘要由CSDN通过智能技术生成

一、环境配置

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
在这里插入图片描述
执行结果
在这里插入图片描述

四、参考资料

https://blog.csdn.net/ssj925319/article/details/109033576

https://blog.csdn.net/weixin_43997331/article/details/104764873?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值