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에서 제공됩니다.
그물을 통해 몇 가지 포인터를 따라 환경을 설정하는 방법은 다음과 같습니다.
- 구성 등록 정보 -> C/C++ -> 일반 -> 추가 포함 디렉토리 -> SDK의 헤더 폴더 경로.
- 구성 속성 -> C/C++ -> 전 처리기 -> 처리기 정의 -> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
- 구성 속성 -> 링커 -> 일반 -> 추가 라이브러리 디렉토리 -> SDK의 라이브러리 폴더의 경로입니다.
- 구성 속성 -> 링커 -> 입력 -> 추가 종속성 -> 릴리스 EXE에서 Packet.lib 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이 혼합 된 것으로 보입니다. 이 문제를 디버깅하는 방법을 알지 못합니다.
해결할 수있는 몇 가지 가이드가 있다면 정말 감사하겠습니다.
- exe 폴더에 복사하는 대신 DLL을 찾는 것이 더 좋습니다 (VC++ 세계 우수 사례).
- 문제를 일으키는 DLL을 찾는 방법에 대한 팁.
시간 내 주셔서 감사합니다.
많은 도움을 주셔서 감사합니다. 문제가 해결되었습니다. –