在Windows 7上安装pcapy时遇到问题 - 无法打开包含文件:'pcap.h
我在一台Windows电脑上尝试安装pcapy。之前我已经安装了WinPcap 4.1.3。
我把pcapy 0.10.8下载到了C:\pcapy-0.10.8。
当我尝试安装的时候,出现了以下情况:
C:\pcapy-0.10.8>c:\Python27\python.exe setup.py install
running install
running build
running build_ext
building 'pcapy' extension
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64\cl.exe /c /nolog o /Ox /MD /W3 /GS- /DNDEBUG -DWIN32=1 -Ic:\devel\oss\wpdpack\Include -Ic:\Python27\include -Ic:\Python27\PC /Tppcapdumper.cc /Fobuild\temp.win-amd64-2.7\Release \pcapdumper.obj
pcapdumper.cc
pcapdumper.cc(12) : fatal error C1083: Cannot open include file: 'pcap.h': No such file or directory
error: command 'cl.exe' failed with exit status 2
我不知道它在找哪个pcap.h文件。我可以确认在pcapy-0.10.8目录下没有这个文件。
我缺少什么呢?我刚安装了WinPcap,是否需要重启一下电脑?谢谢!
补充一下……这是我WinPcap安装日志的输出:
WinPcap 4.1.0.2980 Installation LOG
-----------------------------------------------------
Debug Information
Operating system detected on registry: 7 - AMD64
True operating system (kernel.dll): 7 - AMD64
npptools.dll present on the system: false
netnm.inf present on the system: false
nmnt.sys present on the system: false
End of log
-----------------------------------------------------
那里的false
是不是意味着WinPcap没有正确安装?我本来希望能在WinPcap目录下找到pcap.h,但它不在那儿。我看到在setup.py中可以添加额外的包含文件目录,但我在我的电脑上找不到pcap.h。那我应该从哪里获取这个文件呢?
4 个回答
在pcapy-0.11.1版本中,setup.py
变得更聪明了,甚至比他们在维基页面上描述的还要聪明:https://github.com/CoreSecurity/pcapy/wiki/Compiling-Pcapy-on-Windows-Guide
调查显示,只需要设置环境变量WPDPACK_BASE
,在Windows系统中可能看起来像这样:
set WPDPACK_BASE=C:\Software\WpdPack
它甚至能够检测你需要32位还是64位的这些库。
之前的回答没有帮我解决问题,但让我更深入地了解了情况。所以这些回答可能有点过时了。
接下来是基于Josh P的回答(我刚刚用这个方法解决了大部分问题):
- 下载WinPcap开发者包
- 解压缩这个压缩文件(比如说
c:\users\foo\Downloads\WpdPack_4_1_2
) - 使用
--global-option
来指定头文件和链接器的位置进行构建
在Windows 7上,当我指定链接器的库文件夹时,我需要选择x64版本的库,而不是默认的x32版本:
pip install pcapy --global-option="build_ext"
--global-option="-Ic:\users\foo\Downloads\WpdPack_4_1_2\WpdPack\include"
--global-option="-Lc:\users\foo\Downloads\WpdPack_4_1_2\WpdPack\lib\x64"
当我使用 ...\lib
(x32)版本的文件时,出现了以下链接错误:
Creating library build\temp.win-amd64-2.7\Release\pcapy.lib and object build\temp.win-amd64-2.7\Release\pcapy.exp
pcapdumper.obj : error LNK2019: unresolved external symbol pcap_dump_close
referenced in function "void __cdecl pcap_dealloc(struct pcapdumper *)"
(?pcap_dealloc@@YAXPEAUpcapdumper@@@Z)
正如Guy Harris所说,下载并安装一个现成的程序通常更简单。如果你选择从源代码构建的话:
- 首先,下载WinPcap开发者包。
接下来,使用pip的
--global-option
。虽然setup.py的用法不同,但我觉得用pip会更好。这里有一行示例代码(记得把路径换成你自己系统里的正确路径;我这里用的是下载文件夹里的路径):
pip install ./pcapy-src-dir --global-option=build_ext --global-option="-LC:\path\to\WpdPack_4_1_2\WpdPack\Lib" --global-option="-IC:\path\to\WpdPack_4_1_2\WpdPack\Include
你也可以看看这个回答。
C:\pcapy-0.10.8>c:\Python27\python.exe setup.py install
根据CoreLabs网站上关于pcapy的内容,这说明你下载的是源代码,而不是Win32的二进制文件。除非你真的需要从源代码编译,否则你会发现直接安装二进制文件要简单得多。
那里的“假”是说WinPcap没有正确安装吗?
不是的。
我希望能找到pcap.h
那么,如果你需要从源代码编译,你需要安装WinPcap的开发者包。WinPcap只是“运行时”,对于像Wireshark这样的已经编译好的程序来说是足够的,但对于需要在你电脑上编译的使用WinPcap的软件来说就不够了——显然,你下载的pcapy的某个版本需要编译。
(这和许多Linux发行版中libpcap的打包方式类似——“libpcap”包只安装运行时,而你需要安装“libpcap-dev”包,或者类似的东西,才能获取头文件。)
但是如果Windows的二进制文件对你有效,那就不用去管WinPcap的开发者包了。