首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual 2015中用Npcap编译VC++程序

在Visual 2015中用Npcap编译VC++程序
EN

Stack Overflow用户
提问于 2016-08-04 06:08:10
回答 1查看 1.6K关注 0票数 0

我正在Visual 2015社区版中编译以下程序。

代码语言:javascript
复制
#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 project @ GitHub下载了这个库。我安装了获得DLL的发行版,并将其SDK库用于头库和链接器库。DLL的安装来自发布包0.0.8-r2,SDK的安装来自0.0.7-r9。

按照网络上的几个指针如何设置环境,我有以下设置。

  1. 配置属性-> C/C++ ->通用->附加包括目录、从->到标头文件夹的路径。
  2. 配置属性-> C/C++ ->预处理器->预处理器定义-> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
  3. 配置属性-> Linker -> General ->附加库目录->从SDK到库文件夹的路径。
  4. 配置属性-> Linker ->输入->附加依赖项-> wpcap.lib Packet.lib

C:\Windows\System32 32\Npcap中安装来自release的DLL。系统为Windows 10家庭。

问题:

以上程序编译得很好。

代码语言:javascript
复制
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问题消失之后,现在我得到了。

代码语言:javascript
复制
'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).

我googled它,它似乎有64位和32位DLL的混合。我不知道如何开始调试这个问题。

如果有人能指导我解决问题,我会非常感激的。

  1. 更好的方法(在VC++世界中的良好实践)找到DLL而不是复制到exe文件夹。
  2. 有关如何查找导致此问题的DLL的提示。

谢谢你抽出时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 12:37:19

从配置上看,HelloWorld.exe是一个32位(x86)程序.我假设您使用的是x64 Windows操作系统,因此C:\Windows\System32\Npcap用于x64 DLL。C:\Windows\SysWOW64\Npcap用于x86 DLL。

您得到了0xc000007b错误,因为您的x86 HelloWorld.exe试图加载Npcap的x64 DLL,这肯定是不对的。

因此,解决方案是将DLL (wpcap.dllPacket.dll)从C:\Windows\SysWOW64\Npcap复制到生成.exe文件的文件夹中。

另一种方法是将C:\Windows\System32添加到PATH环境变量中。因此,您的x86和x64二进制文件将始终找到正确的Npcap,无论它们位于何处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38759639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档