<p><strong>更改了答案</strong></p>
<ul>
<li><p>下载<a href="https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download" rel="nofollow">https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download</a>。</p></li>
<li><p>运行它。</p></li>
<li><p>选择:</p>
<ul>
<li><p>mingw32基</p></li>
<li><p>明W32-gcc-g++</p></li>
</ul></li>
<li><p>选择菜单“安装”=>;“应用更改”</p></li>
</ul>
<p>现在,您有了一个全功能的MinGW GCC编译器,其中包括头文件。</p>
<p><code>io.h</code>应该位于<code>C:\MinGW\include</code>。</p>
<p><strong>更新</strong></p>
<p>我已经成功地使用Python 2.7.11(在Wine下,因为我不运行Windows,但应该是相同的)按照您在问题中描述的过程编译了它。</p>
<p>我必须做的一件事是修改<code>pypcap</code>中的<code>setup.py</code>部分,因为它没有设置到pcap include的正确路径。</p>
<p>如果你到了那里请告诉我。</p>
<p>希望有帮助。</p>
<p><strong>更改为<code>setup.py</code></strong></p>
<p>将函数<code>_pcap_config</code>替换为此修改版本:</p>
<pre><code>def _pcap_config(self, dirs=[ None ]):
cfg = {}
if not dirs[0]:
dirs = [ '/usr', sys.prefix ] + glob.glob('/opt/libpcap*') + \
glob.glob('../libpcap*') + glob.glob('../wpdpack*')
for d in dirs:
for sd in ('include/pcap', 'include', ''):
if os.path.exists(os.path.join(d, sd, 'pcap.h')):
cfg.setdefault('include_dirs', []).append(os.path.join(d, sd))
for d in dirs:
for sd in ('include/pcap', 'include', ''):
for sd in ('lib', 'lib64', ''):
for lib in (('pcap', 'libpcap.a'),
('pcap', 'libpcap.so'),
('pcap', 'libpcap.dylib'),
('wpcap', 'wpcap.lib')):
if os.path.exists(os.path.join(d, sd, lib[1])):
cfg['library_dirs'] = [ os.path.join(d, sd) ]
cfg['libraries'] = [ lib[0] ]
if lib[0] == 'wpcap':
cfg['libraries'].append('iphlpapi')
cfg['extra_compile_args'] = \
[ '-DWIN32', '-DWPCAP' ]
print 'found', cfg
self._write_config_h(cfg)
return cfg
raise Exception("couldn't find pcap build or installation directory")
</code></pre>
<p>它基本上只是将包含<code>pcap.h</code>的所有路径添加到include中。</p>
<p><strong>编译</strong></p>
<pre><code>Z:\pypcap-master>mingw32-make
python setup.py config --with-pcap=c:\\wpdpack
running config
found {'libraries': ['wpcap', 'iphlpapi'], 'library_dirs': ['c:\\wpdpack\\lib'], 'extra_compile_args': ['-DWIN32', '-DWPCAP'], 'include_dirs': ['c:\\wpdpack\\include/pcap', 'c:\\wpdpack\\include']}
python setup.py build
running build
running build_ext
building 'pcap' extension
creating build
creating build\temp.win32-2.7
creating build\temp.win32-2.7\Release
C:\MinGW\bin\gcc.exe -mdll -O -Wall -Ic:\wpdpack\include/pcap -Ic:\wpdpack\include -IC:\Python27\include -IC:\Python27\PC -c pcap.c -o build\temp.win32-2.7\Release\pcap.o -DWIN32 -DWPCAP
pcap.c: In function '__pyx_f_4pcap_3bpf_filter':
pcap.c:328:48: warning: passing argument 2 of 'PyObject_AsCharBuffer' from incompatible pointer type
__pyx_1 = (PyObject_AsCharBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) < 0);
^
In file included from C:\Python27\include/Python.h:133:0,
from pcap.c:4:
C:\Python27\include/abstract.h:476:22: note: expected 'const char **' but argument is of type 'char **'
PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
^
pcap.c:337:86: warning: pointer targets in passing argument 2 of 'bpf_filter' differ in signedness [-Wpointer-sign]
__pyx_1 = (bpf_filter(((struct __pyx_obj_4pcap_bpf *)__pyx_v_self)->fcode.bf_insns,__pyx_v_p,__pyx_v_n,__pyx_v_n) == 0);
^
In file included from pcap.c:30:0:
c:\wpdpack\include/pcap/pcap.h:354:7: note: expected 'const u_char *' but argument is of type 'char *'
u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
^
pcap.c: In function '__pyx_f_4pcap_4pcap_dispatch':
pcap.c:955:91: warning: passing argument 3 of 'pcap_dispatch' from incompatible pointer type
__pyx_v_n = pcap_dispatch(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,__pyx_1,__pyx_f_4pcap___pcap_handler,((unsigned char *)(&__pyx_v_ctx)));
^
In file included from pcap.c:30:0:
c:\wpdpack\include/pcap/pcap.h:300:5: note: expected 'pcap_handler' but argument is of type 'void (*)(void *, struct pcap_pkthdr *, char *)'
int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
^
pcap.c: In function '__pyx_f_4pcap_4pcap_loop':
pcap.c:1059:99: warning: passing argument 3 of 'pcap_ex_next' from incompatible pointer type
__pyx_v_n = pcap_ex_next(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,(&__pyx_v_hdr),(&__pyx_v_pkt));
^
In file included from pcap.c:31:0:
pcap_ex.h:13:7: note: expected 'u_char **' but argument is of type 'char **'
int pcap_ex_next(pcap_t *pcap, struct pcap_pkthdr **hdr, u_char **pkt);
^
pcap.c: In function '__pyx_f_4pcap_4pcap_sendpacket':
pcap.c:1154:98: warning: pointer targets in passing argument 2 of 'pcap_sendpacket' differ in signedness [-Wpointer-sign]
__pyx_3 = PyInt_FromLong(pcap_sendpacket(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,__pyx_1,__pyx_2)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; goto __pyx_L1;}
^
In file included from pcap.c:30:0:
c:\wpdpack\include/pcap/pcap.h:311:5: note: expected 'const u_char *' but argument is of type 'char *'
int pcap_sendpacket(pcap_t *, const u_char *, int);
^
pcap.c: In function '__pyx_f_4pcap_4pcap___next__':
pcap.c:1312:99: warning: passing argument 3 of 'pcap_ex_next' from incompatible pointer type
__pyx_v_n = pcap_ex_next(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,(&__pyx_v_hdr),(&__pyx_v_pkt));
^
In file included from pcap.c:31:0:
pcap_ex.h:13:7: note: expected 'u_char **' but argument is of type 'char **'
int pcap_ex_next(pcap_t *pcap, struct pcap_pkthdr **hdr, u_char **pkt);
^
C:\MinGW\bin\gcc.exe -mdll -O -Wall -Ic:\wpdpack\include/pcap -Ic:\wpdpack\include -IC:\Python27\include -IC:\Python27\PC -c pcap_ex.c -o build\temp.win32-2.7\Release\pcap_ex.o -DWIN32 -DWPCAP
pcap_ex.c: In function 'pcap_ex_next':
pcap_ex.c:237:34: warning: passing argument 3 of 'pcap_next_ex' from incompatible pointer type
return (pcap_next_ex(pcap, hdr, pkt));
^
In file included from pcap_ex.c:16:0:
c:\wpdpack\include/pcap/pcap.h:303:6: note: expected 'const u_char **' but argument is of type 'u_char **'
int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
^
writing build\temp.win32-2.7\Release\pcap.def
creating build\lib.win32-2.7
C:\MinGW\bin\gcc.exe -shared -s build\temp.win32-2.7\Release\pcap.o build\temp.win32-2.7\Release\pcap_ex.o build\temp.win32-2.7\Release\pcap.def -Lc:\wpdpack\lib -LC:\Python27\libs -LC:\Python27\PCbuild -LC:\Python27\PC\VS9.0 -lwpcap -liphlpapi -lpython27 -lmsvcr90 -o build\lib.win32-2.7\pcap.pyd
Z:\pypcap-master>
</code></pre>
<p><strong>链接</strong></p>
<p>使用MinGW(32位),您需要32位Python安装。对于64位Python,您需要安装<a href="http://mingw-w64.org/doku.php/download/win-builds" rel="nofollow">MinGW (64-bit)</a>。</p>
<p>因此,您可以安装32位Python,也可以安装64位MinGW。</p>
<p><em>我们已经接近了,你会成功的:)</em></p>