2016-08-04 1 views
0

Visual Studio 2015 Community Edition에서 다음 프로그램을 컴파일 중입니다.Visual Studio에서 Npcap을 사용하여 VC++ 프로그램 컴파일 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 project @ GitHub에서 라이브러리를 다운로드했습니다. DLL을 가져오고 헤더 및 링커 라이브러리에 SDK 라이브러리를 사용하기 위해 릴리스를 설치했습니다. DLL의 설치는 릴리스 패키지 0.0.8-r2에서 제공되며 SDK는 0.0.7-r9에서 제공됩니다.

그물을 통해 몇 가지 포인터를 따라 환경을 설정하는 방법은 다음과 같습니다.

  1. 구성 등록 정보 -> C/C++ -> 일반 -> 추가 포함 디렉토리 -> SDK의 헤더 폴더 경로.
  2. 구성 속성 -> C/C++ -> 전 처리기 -> 처리기 정의 -> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
  3. 구성 속성 -> 링커 -> 일반 -> 추가 라이브러리 디렉토리 -> SDK의 라이브러리 폴더의 경로입니다.
  4. 구성 속성 -> 링커 -> 입력 -> 추가 종속성 -> 릴리스 EXE에서 Packet.lib
  5. wpcap.lib

DLL은 C에 설치됩니다 : \ WINDOWS \ SYSTEM32 \ Npcap. 시스템은 Windows 10 Home입니다.

질문 :

위의 프로그램은 잘 컴파일합니다.

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++에 익숙하지 않았습니다. 제가봤을 때 봤거든요. 문제를 극복하고, System32의 DLL을 .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). 

Google 검색 결과, 64 비트와 32 비트 DLL이 혼합 된 것으로 보입니다. 이 문제를 디버깅하는 방법을 알지 못합니다.

해결할 수있는 몇 가지 가이드가 있다면 정말 감사하겠습니다.

  1. exe ​​폴더에 복사하는 대신 DLL을 찾는 것이 더 좋습니다 (VC++ 세계 우수 사례).
  2. 문제를 일으키는 DLL을 찾는 방법에 대한 팁.

시간 내 주셔서 감사합니다.

답변

0

구성에서 HelloWorld.exe은 32 비트 (x86) 프로그램입니다. 나는 당신이 x64 Windows OS를 사용하고 있다고 가정하고, 따라서 C:\Windows\System32\Npcap은 x64 DLL을위한 것이다. C:\Windows\SysWOW64\Npcap은 x86 DLL 용입니다.

x86 HelloWorld.exe이 Npcap의 x64 DLL을로드하려고했기 때문에 0xc000007b 오류가 발생했습니다. 이는 옳지 않습니다.

그래서 해결 방법은 C:\Windows\SysWOW64\Npcap에서 .exe 파일이 생성되는 폴더로 DLL (wpcap.dll, Packet.dll)을 복사하는 것입니다.

또 다른 방법은 C:\Windows\System32을 환경 변수 PATH에 추가하는 것입니다. 따라서 x86 및 x64 바이너리는 어디에 있든 관계없이 항상 올바른 Npcap DLL을 찾습니다.

+0

많은 도움을 주셔서 감사합니다. 문제가 해결되었습니다. –

관련 문제