博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用cl.exe和linker.exe连接程序
阅读量:2085 次
发布时间:2019-04-29

本文共 3336 字,大约阅读时间需要 11 分钟。

使用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\x64C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64C:\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\cppwinrtC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\sharedC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrtC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\umC:\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
在这里插入图片描述
执行结果
在这里插入图片描述

四、参考资料

转载地址:http://uivqf.baihongyu.com/

你可能感兴趣的文章
Java Guava中的函数式编程讲解
查看>>
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>