Saya mengkompilasi program berikut dalam Visual Studio 2015 Community Edition.
#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;
}
Untuk pcap saya telah mengunduh perpustakaan dari proyek Npcap @ GitHub. Saya menginstal rilis untuk mendapatkan DLL dan menggunakan perpustakaan SDK untuk perpustakaan header dan linker. Instalasi DLL berasal dari paket rilis 0.0.8-r2 dan SDK dari 0.0.7-r9.
Mengikuti beberapa petunjuk di internet cara mengatur lingkungan, saya memiliki pengaturan berikut.
- Properti Konfigurasi -> C/C++ -> Umum -> Direktori Sertakan Tambahan -> Jalur ke folder header dari SDK.
- Properti Konfigurasi -> C/C++ -> Praprosesor -> Definisi Praprosesor -> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
- Properti Konfigurasi -> Linker -> Umum -> Direktori Perpustakaan Tambahan -> Jalur ke folder perpustakaan dari SDK.
- Properti Konfigurasi -> Linker -> Input -> Dependensi Tambahan -> wpcap.lib Packet.lib
DLL dari rilis exe diinstal di C:\Windows\System32\Npcap. Sistemnya adalah Windows 10 Home.
Pertanyaan:
Program di atas dapat dikompilasi dengan baik.
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 ==========
Ketika saya menjalankannya, ia mengeluh tentang file wpcap.dll yang hilang. Saya baru mengenal VS dan juga VC++, saya mencari di Google dan teknik paling sederhana yang saya temukan baru saja mengatasi masalah ini, saya menyalin DLL dari System32 ke folder tempat file .exe dibuat.
Setelah masalah DLL ini hilang, tetapi sekarang saya mendapatkannya.
'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).
Saya googling, sepertinya ada campuran DLL 64 bit dan 32 bit. Saya tidak tahu bagaimana memulai men-debug masalah ini.
Saya akan sangat menghargai jika seseorang membimbing saya, untuk menyelesaikannya.
- Cara yang lebih baik (praktik yang baik di dunia VC++) untuk menemukan DLL daripada menyalin ke folder exe.
- Kiat tentang cara menemukan DLL mana yang menyebabkan masalah.
Terima kasih untuk waktunya.