在 Visual Studio 2015 年使用 Npcap 编译 VC++ 程序
Compiling VC++ program with Npcap in Visual Studio 2015
我正在 Visual Studio 2015 社区版中编译以下程序。
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <pcap.h>
int main(int argc, char **argv)
{
pcap_if_t *alldevsp, *device;
char errbuf[100];
int count = 1;
//First get the list of available devices
printf("Finding available devices ... ");
if (pcap_findalldevs(&alldevsp, errbuf))
{
printf("Error finding devices : %s", errbuf);
exit(1);
}
printf("Done");
//Print the available devices
printf("\nAvailable Devices are :\n");
for (device = alldevsp; device != NULL; device = device->next)
{
printf("%d. %s - %s\n", count, device->name, device->description);
count++;
}
return 0;
}
对于 pcap,我已经从 Npcap 项目 @ GitHub 下载了库。
我安装了用于获取 DLL 并将其 SDK 库用于 header 和链接器库的版本。 DLL安装来自0.0.8-r2发布包,SDK安装来自0.0.7-r9.
根据网络上的几个关于如何设置环境的指示,我有以下设置。
- 配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> 来自 SDK 的 header 文件夹路径。
- 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
- 配置属性 -> 链接器 -> 常规 -> 附加库目录 -> 来自 SDK 的库文件夹路径。
- 配置属性 -> 链接器 -> 输入 -> 附加依赖项 -> wpcap.lib Packet.lib
发布 exe 中的 DLL 安装在 C:\Windows\System32\Npcap 中。
系统是Windows10家。
问题:
以上程序编译正常。
1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1> HelloWorld.cpp
1> HelloWorld.vcxproj -> C:\Users\xxx\documents\visual studio 2015\Projects\HelloWorld\Debug\HelloWorld.exe
1> HelloWorld.vcxproj -> C:\Users\xxx\documents\visual studio 2015\Projects\HelloWorld\Debug\HelloWorld.pdb (Full PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
当我 运行 它时,它抱怨缺少 wpcap.dll 文件。我是 VS 和 VC++ 的新手,我用谷歌搜索,发现最简单的技术刚刚解决了这个问题,我将 DLL 从 System32 复制到生成 .exe 文件的文件夹。
此 DLL 问题消失后,但现在我得到了。
'HelloWorld.exe' (Win32): Loaded 'C:\Users\xxx\Documents\Visual Studio 2015\Projects\HelloWorld\Debug\HelloWorld.exe'. Symbols loaded.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\ntdll.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\kernel32.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\KernelBase.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\ucrtbased.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\vcruntime140d.dll'. Cannot find or open the PDB file.
The thread 0x160c has exited with code -1073741701 (0xc000007b).
The thread 0xd5c has exited with code -1073741701 (0xc000007b).
The thread 0x16c4 has exited with code -1073741701 (0xc000007b).
The program '[9632] HelloWorld.exe' has exited with code -1073741701 (0xc000007b).
我用谷歌搜索了一下,好像混合了 64 位和 32 位 DLL。我不知道如何开始调试这个问题。
如果有人指导我解决,我将不胜感激。
- 查找 DLL 而不是复制到 exe 文件夹的更好方法(VC++ 世界中的良好做法)。
- 有关如何查找导致问题的 DLL 的提示。
谢谢你的时间。
从配置来看,您的 HelloWorld.exe
是一个 32 位 (x86) 程序。我假设您使用的是 x64 Windows OS,因此 C:\Windows\System32\Npcap
适用于 x64 DLL。 C:\Windows\SysWOW64\Npcap
用于 x86 DLL。
您遇到 0xc000007b
错误是因为您的 x86 HelloWorld.exe
正在尝试加载 Npcap 的 x64 DLL,这绝对是不正确的。
因此解决方案是将 DLL(wpcap.dll
、Packet.dll
)从 C:\Windows\SysWOW64\Npcap
复制到生成 .exe 文件的文件夹。
另一种方法是将 C:\Windows\System32
添加到 PATH
环境变量。因此,无论它们位于何处,您的 x86 和 x64 二进制文件总能找到正确的 Npcap DLL。
我正在 Visual Studio 2015 社区版中编译以下程序。
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <pcap.h>
int main(int argc, char **argv)
{
pcap_if_t *alldevsp, *device;
char errbuf[100];
int count = 1;
//First get the list of available devices
printf("Finding available devices ... ");
if (pcap_findalldevs(&alldevsp, errbuf))
{
printf("Error finding devices : %s", errbuf);
exit(1);
}
printf("Done");
//Print the available devices
printf("\nAvailable Devices are :\n");
for (device = alldevsp; device != NULL; device = device->next)
{
printf("%d. %s - %s\n", count, device->name, device->description);
count++;
}
return 0;
}
对于 pcap,我已经从 Npcap 项目 @ GitHub 下载了库。 我安装了用于获取 DLL 并将其 SDK 库用于 header 和链接器库的版本。 DLL安装来自0.0.8-r2发布包,SDK安装来自0.0.7-r9.
根据网络上的几个关于如何设置环境的指示,我有以下设置。
- 配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> 来自 SDK 的 header 文件夹路径。
- 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
- 配置属性 -> 链接器 -> 常规 -> 附加库目录 -> 来自 SDK 的库文件夹路径。
- 配置属性 -> 链接器 -> 输入 -> 附加依赖项 -> wpcap.lib Packet.lib
发布 exe 中的 DLL 安装在 C:\Windows\System32\Npcap 中。 系统是Windows10家。
问题:
以上程序编译正常。
1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1> HelloWorld.cpp
1> HelloWorld.vcxproj -> C:\Users\xxx\documents\visual studio 2015\Projects\HelloWorld\Debug\HelloWorld.exe
1> HelloWorld.vcxproj -> C:\Users\xxx\documents\visual studio 2015\Projects\HelloWorld\Debug\HelloWorld.pdb (Full PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
当我 运行 它时,它抱怨缺少 wpcap.dll 文件。我是 VS 和 VC++ 的新手,我用谷歌搜索,发现最简单的技术刚刚解决了这个问题,我将 DLL 从 System32 复制到生成 .exe 文件的文件夹。
此 DLL 问题消失后,但现在我得到了。
'HelloWorld.exe' (Win32): Loaded 'C:\Users\xxx\Documents\Visual Studio 2015\Projects\HelloWorld\Debug\HelloWorld.exe'. Symbols loaded.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\ntdll.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\kernel32.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\KernelBase.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\ucrtbased.dll'. Cannot find or open the PDB file.
'HelloWorld.exe' (Win32): Loaded 'C:\Windows\syswow64\vcruntime140d.dll'. Cannot find or open the PDB file.
The thread 0x160c has exited with code -1073741701 (0xc000007b).
The thread 0xd5c has exited with code -1073741701 (0xc000007b).
The thread 0x16c4 has exited with code -1073741701 (0xc000007b).
The program '[9632] HelloWorld.exe' has exited with code -1073741701 (0xc000007b).
我用谷歌搜索了一下,好像混合了 64 位和 32 位 DLL。我不知道如何开始调试这个问题。
如果有人指导我解决,我将不胜感激。
- 查找 DLL 而不是复制到 exe 文件夹的更好方法(VC++ 世界中的良好做法)。
- 有关如何查找导致问题的 DLL 的提示。
谢谢你的时间。
从配置来看,您的 HelloWorld.exe
是一个 32 位 (x86) 程序。我假设您使用的是 x64 Windows OS,因此 C:\Windows\System32\Npcap
适用于 x64 DLL。 C:\Windows\SysWOW64\Npcap
用于 x86 DLL。
您遇到 0xc000007b
错误是因为您的 x86 HelloWorld.exe
正在尝试加载 Npcap 的 x64 DLL,这绝对是不正确的。
因此解决方案是将 DLL(wpcap.dll
、Packet.dll
)从 C:\Windows\SysWOW64\Npcap
复制到生成 .exe 文件的文件夹。
另一种方法是将 C:\Windows\System32
添加到 PATH
环境变量。因此,无论它们位于何处,您的 x86 和 x64 二进制文件总能找到正确的 Npcap DLL。