我正在开发 Qt 项目,并将使用 PcapPlusPlus 库来读取 pcapng 文件。
我使用的是 Windows 和 MSVC 2019 64 位,并为我的项目下载了这个库:
pcapplusplus-23.09-windows-vs2022-x64-release
。
我编辑了
.pro
文件以添加 PcapPlusPlus 库:
INCLUDEPATH += \
$$PWD\pcapplusplus\include\pcapplusplus
LIBS +=
$$PWD\pcapplusplus\lib
并使用以下方法包含库:
#include "IPv4Layer.h"
#include "Packet.h"
#include "PcapFileDevice.h"
有
pcapng.h
和 pcapng.cpp
文件用于使用库从 pcapng 文件读取数据字节。
当我声明一个这样的对象时:
pcpp::PcapFileReaderDevice reader(R"(C:\Users\abc.xyz\Desktop\1_packet.pcap)");
没有错误,但是当我构建项目时,出现很多错误:
C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h:240: error: C2011: 'sockaddr': 'struct' type redefinition
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared\ws2def.h(240): error C2011: 'sockaddr': 'struct' type redefinition
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um\winsock.h(482): note: see declaration of 'sockaddr'
C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h:442: error: C2143: syntax error: missing '}' before 'constant'
C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h:442: error: C2059: syntax error: 'constant'
C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h:496: error: C2143: syntax error: missing ';' before '}'
C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h:496: error: C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h:496: error: C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h:638: error: C2011: 'sockaddr_in': 'struct' type redefinition
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared\ws2def.h(638): error C2011: 'sockaddr_in': 'struct' type redefinition
C:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um\winsock.h(309): note: see declaration of 'sockaddr_in'
...
我下载了一个预编译库。我的意思是,我可以直接使用它,不是吗?
LIBS 应该是
LIBS += -L$$PWD\pcapplusplus\lib -lpcapplusplus
或者类似的东西。也就是说,添加带有
-L
的库搜索路径,带有 -l
的库(库“基本名称”,没有前缀或后缀)。