我正在开发 Qt 项目,并将使用 PcapPlusPlus 库来读取 PcapNG 文件。
我使用的是 Windows 和 MSVC 2019 64 位,并为我的项目下载了这个库:
pcapplusplus-23.09-windows-vs2022-x64-release
。
Pcap++ 库不能单独工作。所以,它需要依赖库。我下载了 Npcap 和 WinPcap SDK。我将
.lib
库和 include directory
包含到 .pro
文件中。
我编辑了
.pro
文件以添加 PcapPlusPlus、Npcap、WinPcap 库:
INCLUDEPATH += \
$$PWD/external/pcapplusplus/include/pcapplusplus \
$$PWD/external/pcapplusplus/include \
$$PWD/external/WpdPack/Include \
$$PWD/external/WpdPack/Include/pcap \
$$PWD/external/npcap/Include \
$$PWD/external/npcap/Include/pcap \
LIBS += \
-L$$PWD/external/pcapplusplus/lib -lPcap++ -lCommon++ -lPacket++ \
-L$$PWD/external/WpdPack/Lib/x64 -lPacket -lwpcap \
-L$$PWD/external/npcap/Lib/x64 -lPacket -lwpcap \
DEPENDPATH += \
$$PWD/external/pcapplusplus/include/pcapplusplus \
$$PWD/external/pcapplusplus/include \
$$PWD/external/WpdPack/Include \
$$PWD/external/WpdPack/Include/pcap \
$$PWD/external/npcap/Include \
$$PWD/external/npcap/Include/pcap \
并使用以下方法包含库:
#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)");
没有错误,但是当我构建项目时,出现了2个错误:
Common++.lib(IpAddress.obj):-1:
error: LNK2019: unresolved external symbol __imp_inet_pton referenced in function
"public: __cdecl pcpp::IPAddress::IPAddress(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"
(??0IPAddress@pcpp@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
Common++.lib(IpAddress.obj):-1:
error: LNK2019: unresolved external symbol inet_ntop referenced in function
"public: bool __cdecl pcpp::IPv4Address::matchSubnet(class pcpp::IPv4Address const &,class pcpp::IPv4Address const &)const "
(?matchSubnet@IPv4Address@pcpp@@QEBA_NAEBV12@0@Z)
我下载了一个预编译库并将依赖库包含到Qt项目中。但我仍然收到错误。
LIBS 应该是
LIBS += -L$$PWD\pcapplusplus\lib -lpcapplusplus
或者类似的东西。也就是说,添加带有
-L
的库搜索路径,带有 -l
的库(库“基本名称”,没有前缀或后缀)。