C++ #error 指令: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll versi

本文介绍了解决在使用Visual Studio编译MFC应用程序时出现的与CRT DLL版本和MFC共享DLL版本不匹配的错误。提供了三种解决方法:调整运行库设置、更改MFC使用方式以及定义预处理器宏_AFXDLL。
部署运行你感兴趣的模型镜像

错误

在使用VS编译文件时出现了如下错误:

#错误:使用/ MD [d](CRT dll版本)构建MFC应用程序需要MFC共享dll版本。请#define _AFXDLL或不使用/ MD [d]

解决方案

1.先选择“属性管理器”,然后按如下路径:项目-》属性-》C/C++-》代码生成-》运行库,将“多线程调试DLL(/MDd)”改成“多线程(/MT)”或“多线程调试(/MTd)”

2.选择“解决方案管理器”,然后按如下路径:项目-》属性-》配置属性-》常规-》项目默认值-》MFC的使用,选择“在静态库中使用MFC”(有时并不需要修改)。

3.由错误提示中的:“Please #define _AFXDLL or do not use /MD[d]”,可知还可以定义“#define _AFXDLL”来解决问题。

 

注意:(/MD)和(/MT)是编译Release版本用的,(/MDd)和(/MTd)是编译Debug版本用的

          (/MD)和(/MDd)选择“在共享DLL中使用MFC”,(/MT)和(/MTd)选择“在静态库中使用MFC”,

参考链接:

解决#error 指令:  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

http://www.manongjc.com/article/77624.html

解决#error 指令:  Please use the /MD switch for _AFXDLL builds

https://www.cnblogs.com/zwh0214/p/6048360.html

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

<think>我们已经在之前的对话中详细讨论了如何解决该编译错误,现在用户再次询问相同的错误,可能是之前的解决方案没有完全解决问题,或者需要更明确的步骤。 因此,我们将重新梳理解决步骤,并确保详细清晰。同时,根据用户提供的引用[1],我们会注意在回答中正确引用。 错误:#error 指令: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] 这个错误表明:项目配置使用了多线程DLL版本的运行时库(/MD或/MDd),但是MFC的配置是使用静态库链接(而不是共享DLL)。因此,我们需要将MFC的配置改为共享DLL,或者定义_AFXDLL宏。 具体解决步骤(针对VS2022): 步骤1:修改项目属性,使用MFC共享DLL 1. 在解决方案资源管理器中,右键单击项目名称,选择“属性”。 2. 在属性页中,展开“配置属性” -> “常规”。 3. 找到“高级”下的“MFC的使用”属性(或者直接在“常规”页面中查找“MFC的使用”)。 4. 将其值改为“在共享 DLL 中使用 MFC”(默认可能是“在静态库中使用 MFC”)。 步骤2:检查并修改运行时库设置(与MFC设置保持一致) 1. 在同一个属性页中,转到“配置属性” -> “C/C++” -> “代码生成”。 2. 查看“运行时库”选项。对于Debug配置,应该设置为“多线程调试DLL (/MDd)”;对于Release配置,应该设置为“多线程DLL (/MD)”。 3. 如果设置不正确,请修改为对应的/MDd(Debug)或/MD(Release)。 步骤3:添加预处理器定义(如果步骤1没有自动添加) 1. 转到“配置属性” -> “C/C++” -> “预处理器”。 2. 在“预处理器定义”中添加“_AFXDLL”(注意不要删除其他定义,用分号隔开)。 步骤4:重新生成解决方案 完成上述设置后,点击“确定”保存设置,然后重新生成解决方案(生成->重新生成解决方案)。 另外,关于Winpcap的配置,请确保: 1. 已经下载并安装了WinPcap开发者包(WpdPack)。 2. 在项目属性中配置了包含目录和库目录: - 包含目录:添加WpdPack中的Include文件夹,例如:D:\WpdPack\Include - 库目录:添加WpdPack中的Lib文件夹,根据平台选择(x64或x86),例如:D:\WpdPack\Lib\x64 3. 在链接器->输入->附加依赖项中添加:wpcap.lib; Packet.lib 如果还有问题,请检查是否所有配置都是针对当前活动平台(如Debug x64)设置的,并且每个项目(如果是多项目解决方案)都需要单独配置。 参考引用[1]中的代码片段,我们注意到在使用pcap_compile设置过滤器时,需要注意过滤器的语法。这里我们主要解决编译错误,所以不再展开。 最后,生成相关问题: §§相关问题§§ 1. 如何在VS2022中为多个项目配置Winpcap开发环境? 2. 使用Winpcap抓包时,如何设置过滤器捕获特定端口的UDP数据包? 3. 在VS2022中,如何解决Winpcap库链接错误(如LNK2019)? </think>### 解决VS2022使用Winpcap抓UDP包时的MFC编译错误 #### 错误原因分析 该错误是由于**MFC运行时库配置不一致**导致的: 项目使用了动态链接的C运行时库(/MD或/MDd),但MFC却配置为静态链接模式。两者必须保持一致[^1]。 错误核心代码提示: ```cpp #error 指令: Building MFC application with /MD[d] requires MFC shared dll version. ``` --- #### 完整解决方案(VS2022操作步骤) ##### 步骤1:启用MFC共享DLL模式 1. 右键项目 → 选择 **属性** 2. 转到 **常规** → **MFC的使用** 3. 修改为: ```diff - [ ] 在静态库中使用 MFC + [✓] 在共享 DLL 中使用 MFC ``` ##### 步骤2:验证运行时库配置 1. 转到 **C/C++** → **代码生成** → **运行时库** 2. 根据编译模式选择: - **Debug模式**:选择 `/MDd` - **Release模式**:选择 `/MD` ##### 步骤3:添加预处理器定义 1. 转到 **C/C++** → **预处理器** → **预处理器定义** 2. 添加 `_AFXDLL` 宏定义 (VS2022一般会自动添加,建议手动确认) ##### 步骤4:配置Winpcap开发环境 1. 下载 [WpdPack](https://www.winpcap.org/devel.htm) 开发包 2. 配置路径: - **包含目录**:`[WpdPack路径]\Include` - **库目录**:`[WpdPack路径]\Lib\x64`(64位项目) 3. **链接器** → **输入** → **附加依赖项**: 添加 `wpcap.lib; Packet.lib` --- #### UDP抓包过滤器示例 参考引用[1]的语法,抓取特定UDP数据包: ```cpp // 抓取源IP为192.168.1.1的UDP包 char packet_filter[] = "udp and src host 192.168.1.1"; // 编译过滤器 if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) < 0) { // 错误处理... } // 设置过滤器 if (pcap_setfilter(adhandle, &fcode) < 0) { // 错误处理... } ``` > 提示:过滤器语法错误是导致抓包失败的常见原因,建议先在[Wireshark](https://www.wireshark.org/)验证语法[^1]。 --- #### 验证步骤 1. 按 **Ctrl+Shift+B** 重新生成解决方案 2. 确认输出窗口无编译错误 3. 测试抓包功能: ```cpp pcap_t *adhandle = pcap_open_live("eth0", 65536, 1, 1000, errbuf); if (adhandle == nullptr) { // 设备打开失败处理 } ``` > **注意**:若项目包含多个子项目,需为每个使用MFC的子项目重复上述步骤1-3。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值