Libpcap 编译失败使用 MS Visual Studio 2012
Libpcap compilation fail using MS Visual Studio 2012
我一直在尝试创建一个程序来分析在 C++ 中使用 MS Visual Studio 2012 在 pcap 文件中捕获的以太网帧。我已经下载了最新的 WinPcap (4.1.3) 和 Libpcap (1.7.2)。
我已经设法将提取的 libpcap 文件夹中的所有子文件夹包含到我的项目中(如果我只添加了根文件夹,则包含不起作用)。然而我有一个错误说没有类型 "Adapter" 的定义。所以我搜索了libpcap中的所有文件并没有找到定义。我也尝试搜索它是否可能在某种标准库中定义,同样没有运气。
我错过了什么吗?我需要以某种特殊方式包含 libpcap 吗? (目前我只包括 #include <pcap.h>
)
我也尝试玩了一下,并评论了pcap.h中的错误行:
Adapter *pcap_get_adapter(pcap_t *p);
我得到了一个不同的错误:
Error 2 error LNK2019: unresolved external symbol
_pcap_open_offline_with_tstamp_precision
所以经过一番研究后,我发现我可能遗漏了一些预处理器定义 (WIN32;WPCAP;HAVE_REMOTE
)。这引发了另一个问题,找不到头文件 Win32-Extensions.h
。然后我就放弃了。
感谢您的任何建议。
为了使用 class 你需要两件事:
- 声明。这个在 .h 文件中,你有它;
- 一个定义。这个在 class 定义的库(动态或静态)中。看来,你错过了这个。您是否正确链接到图书馆?请检查一下,很可能是链接错误(或没有链接)的原因。
I have downloaded latest WinPcap (4.1.3) ... unresolved external symbol _pcap_open_offline_with_tstamp_precision
最新的 WinPcap 不是基于最新的 libpcap,甚至不是基于相对较新版本的 libpcap,所以它没有 pcap_open_offline_with_tstamp_precision()
,它只有 pcap_open_offline()
.
最新版本的 WinPcap 也无法读取 pcap-ng 文件或 "pcap with nanosecond resolution" 文件,因此无论如何它都无法为您提供纳秒精度的时间戳。
如果您希望能够读取具有纳秒级精度时间戳的文件并从中获取纳秒级分辨率的时间戳值,您必须 运行 在 UN*X 上使用更新的libpcap 版本;这就是你在 Linux.
上所做的
如果您希望能够 运行 使用 WinPcap 在 Windows 上运行您的程序 - 或者使用旧版本的 libpcap 在 UN*Xes 版本上运行 - 您必须使用 pcap_open_offline()
打开捕获文件,并使用微秒分辨率的时间戳。
I have downloaded latest WinPcap (4.1.3) and Libpcap (1.7.2).
您不能只是将它们放在一起并希望它有效。如果你想下载 WinPcap 和 libpcap 源码,并尝试将它们合并到更新版本的 WinPcap 中,那将是一个相当复杂的项目,你可能需要研究它们的源码。
您可能只想安装 WinPcap 和 the WinPcap developer's pack(是的,它说的是 4.1.2,但 4.1.2 开发人员包可与 4.1.3 配合使用,如注释所述)并使用它,并将 libpcap 留给 UN*X 框。
- 您应该下载并安装 WinPcap 4.1.3
- 您应该下载 WinPcap 4.1.2 SDK
- 请参阅 WinPcap 4.1.2 SDK 存档中的 "Examples-pcap\readfile\readfile.c" 示例。这将有助于开始。
如果您有 pcap-ng 文件或纳秒精度的文件,请使用 WinPcap 4.1.3-libpcap 1.7.3 port
更新您的 WinPcap 库
我一直在尝试创建一个程序来分析在 C++ 中使用 MS Visual Studio 2012 在 pcap 文件中捕获的以太网帧。我已经下载了最新的 WinPcap (4.1.3) 和 Libpcap (1.7.2)。
我已经设法将提取的 libpcap 文件夹中的所有子文件夹包含到我的项目中(如果我只添加了根文件夹,则包含不起作用)。然而我有一个错误说没有类型 "Adapter" 的定义。所以我搜索了libpcap中的所有文件并没有找到定义。我也尝试搜索它是否可能在某种标准库中定义,同样没有运气。
我错过了什么吗?我需要以某种特殊方式包含 libpcap 吗? (目前我只包括 #include <pcap.h>
)
我也尝试玩了一下,并评论了pcap.h中的错误行:
Adapter *pcap_get_adapter(pcap_t *p);
我得到了一个不同的错误:
Error 2 error LNK2019: unresolved external symbol _pcap_open_offline_with_tstamp_precision
所以经过一番研究后,我发现我可能遗漏了一些预处理器定义 (WIN32;WPCAP;HAVE_REMOTE
)。这引发了另一个问题,找不到头文件 Win32-Extensions.h
。然后我就放弃了。
感谢您的任何建议。
为了使用 class 你需要两件事:
- 声明。这个在 .h 文件中,你有它;
- 一个定义。这个在 class 定义的库(动态或静态)中。看来,你错过了这个。您是否正确链接到图书馆?请检查一下,很可能是链接错误(或没有链接)的原因。
I have downloaded latest WinPcap (4.1.3) ...
unresolved external symbol _pcap_open_offline_with_tstamp_precision
最新的 WinPcap 不是基于最新的 libpcap,甚至不是基于相对较新版本的 libpcap,所以它没有 pcap_open_offline_with_tstamp_precision()
,它只有 pcap_open_offline()
.
最新版本的 WinPcap 也无法读取 pcap-ng 文件或 "pcap with nanosecond resolution" 文件,因此无论如何它都无法为您提供纳秒精度的时间戳。
如果您希望能够读取具有纳秒级精度时间戳的文件并从中获取纳秒级分辨率的时间戳值,您必须 运行 在 UN*X 上使用更新的libpcap 版本;这就是你在 Linux.
上所做的如果您希望能够 运行 使用 WinPcap 在 Windows 上运行您的程序 - 或者使用旧版本的 libpcap 在 UN*Xes 版本上运行 - 您必须使用 pcap_open_offline()
打开捕获文件,并使用微秒分辨率的时间戳。
I have downloaded latest WinPcap (4.1.3) and Libpcap (1.7.2).
您不能只是将它们放在一起并希望它有效。如果你想下载 WinPcap 和 libpcap 源码,并尝试将它们合并到更新版本的 WinPcap 中,那将是一个相当复杂的项目,你可能需要研究它们的源码。
您可能只想安装 WinPcap 和 the WinPcap developer's pack(是的,它说的是 4.1.2,但 4.1.2 开发人员包可与 4.1.3 配合使用,如注释所述)并使用它,并将 libpcap 留给 UN*X 框。
- 您应该下载并安装 WinPcap 4.1.3
- 您应该下载 WinPcap 4.1.2 SDK
- 请参阅 WinPcap 4.1.2 SDK 存档中的 "Examples-pcap\readfile\readfile.c" 示例。这将有助于开始。
如果您有 pcap-ng 文件或纳秒精度的文件,请使用 WinPcap 4.1.3-libpcap 1.7.3 port
更新您的 WinPcap 库