Windows下编译Wireshark 1.8.x
参考: http://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html
序
- 版本: Wireshark 1.8.4/1.8.6
- 系统: Windows 7 Ultimate 32bit/64bit
- 编译器: MSVC++ 2005 / 2010 (这个版本不支持MSVC++ 2012编译)
编译步骤
-
下载源代码
可以到这里下载官方release代码 http://www.wireshark.org/download/src/, 或者根据http://www.wireshark.org/develop.html 的提示,使用SVN等工具从代码仓库获得代码。
-
安装Cygwin
到 http://www.cygwin.com/setup.exe 下载Cygwin的安装程序,执行在线安装,后面将会看到,如果使用旧的Cygwin版本,可能会导致错误。安装时根据提示,选择以下包:
- Archive/unzip
- *Archive/zip (only needed if you intend to build the U3 package)
- Devel/bison
- Devel/flex
- *Devel/subversion (optional - see discussion about using Subversion below)
- Interpreters/perl
- Utils/patch
- Web/wget
假设其安装到D:\dev\Cygwin。
-
安装Python 2.7
没什么说的,下载后安装即可,不过python的官网被和谐了。假设安装在C:\Python27目录。
-
修改config.nmake文件
此文件位于源代码根目录下。可视情况修改以下定义:
VERSION_EXTRA, 加入自定义版本号, 如"-myversion".
WIRESHARK_TARGET_PLATFORM
WIRESHARK_LIBS, 设置编译wireshark所需的库所在的目录. Wireshark1.8.6改为:WIRESHARK_LIB_DIR,这里不可以用相对目录,必须用绝对目录。设置后无效,setup时程序还是把库下载到了C:\wireshark-win32-libs-1.8
PROGRAM_FILES, 设置本机程序安装目录, 默认即可.
MSVC_VARIANT, 只将值为MSVC2005的那一行前的#去掉, 其余MSVC_VARIANT项行首全部加上#注释掉.
*GTK1_DIR, GTK2_DIR, 如果只想生成好看的GTK2 GUI的程序, 用#注释掉GTK1_DIR行.此设置在本版本中已废弃,只采用GTK2.
CYGWIN_PATH, 将其设置为Cygwin的bin目录.如D:\dev\Cygwin\bin
*PYTHON及其后的PATH, 将其修改为本机python.exe和其安装目录的位置.此版本会自动检测Python,不需要管
MAKENSIS, 如果你没有安装NSIS安装程序制作工具, 用#注释掉此行.
HHC_DIR, 如果没有安装HTML Help Workshop(chm帮助文件制作工具), 注释掉此行.
INSTALL_DIR=debug, 编译后wireshark的存放目录,相对于源代码主目录而言,应设置成源代码目录的子目录,否则会出错。
*INSTALL1_DIR, 如果不想生成GTK1程序, 用#注释掉此行.此设置在本版本中已废弃
HHC_EXE, 如果没有安装HTML Help Workshop(chm帮助文件制作工具), 注释掉此行.
以DEBUG方式编译wireshark: (http://wiki.wireshark.org/Development/Tips)
# Linker flags
# /DEBUG generate debug info
LOCAL_LDFLAGS=/DEBUG -
检查编译工具是否就绪
为了在命令行使用VC++编译工具,需要在编译前执行VC++自带的环境设置脚本,这个脚本在 C:\Program Files\Microsoft Visual Studio 8\VC\bin 或 C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat。前者调用的是后者。 可以写一个bat文件,内容如下,每次编译前执行这个文件,以构建VC++编译工具链运行环境。
@echo off set PATH=%PATH%:. set PATH=%PATH%;C:\cygwin\bin echo 设置 Visual Studio environment... "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat" title Command Prompt (MSVC++ 2005)
VC++ 2010:
@echo off set PATH=%PATH%:. set PATH=%PATH%;C:\cygwin\bin echo 设置 Visual Studio environment... "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat" title Command Prompt (MSVC++ 2010)
运行以上脚本之后,进入wireshark源码主目录,运行
nmake -f Makefile.nmake verify_tools
如果所需工具都就绪,则输出像下面这样:
-------------------------------------------------------------------------------- E:\dev\wireshark-1.8.4>nmake -f Makefile.nmake verify_tools Microsoft (R) 程序维护实用工具 8.00.50727.762 版 版权所有 (C) Microsoft Corporation。保留所有权利。 Checking for required applications: cl: /cygdrive/c/Program Files/Microsoft Visual Studio 8/VC/BIN/cl link: /cygdrive/c/Program Files/Microsoft Visual Studio 8/VC/BIN/link nmake: /cygdrive/c/Program Files/Microsoft Visual Studio 8/VC/BIN/nmake mt: /cygdrive/c/Program Files/Microsoft Visual Studio 8/VC/BIN/mt bash: /usr/bin/bash bison: /usr/bin/bison flex: /usr/bin/flex env: /usr/bin/env grep: /usr/bin/grep /usr/bin/find: /usr/bin/find peflags: /usr/bin/peflags perl: /usr/bin/perl C:\Python27\python.exe: /cygdrive/c/Python27/python.exe sed: /usr/bin/sed unzip: /usr/bin/unzip wget: /usr/bin/wget --------------------------------------------------------------------------------
-
安装依赖库
nmake -f Makefile.nmake setup
-
开始编译
nmake -f Makefile.nmake distclean nmake -f Makefile.nmake all
问题及解决
在verify tool时出错:不能在lib目录找到current_tag.txt。 解决:手动创建此文件,并根据提示写上内容,一般是一个日期字符串,如2012-05-30
在verify tool时出错:Can't find: peflags。 ERROR: These application(s) are either not installed or simply can't be found in the current PATH: ,然后跟一堆文本。 解决:安装最新的Cygwin。
编译时出错: unix2dos: ..wireshark-debug/help/*.txt: No such file or directory unix2dos: Skipping ..wireshark-debug/help/*.txt, not a regular file. NMAKE : fatal error U1077: “d:\dev\cygwin\bin\u2d.EXE”: 返回代码“0x2” Stop.
解决:是由于之前把INSTALL_DIR设置成wireshark源代码目录的同级目录所致,把它设为源代码目录的子目录后问题消失。
Visual C++ 2005自写程序调用编译后的wireshark dll问题
自已写的debug版程序,调用libwireshrak.dll,调试时报runtime error R6034。以下文章指出这是由于编译wireshark时所用的CRT和当前debug程序的CRT不一样,造成同时有两个版本的CRT DLL被加载,所以出错。可以在编译wireshark时在config.nmake文件处做以下改动(添加,后面的不动),强制以debug库编译:
LOCAL_LDFLAGS=/DEBUG /DEFAULTLIB:msvcrtd.lib /NODEFAULTLIB:msvcrt.lib
Visual C++ 2010编译时错误: LNK1123 failure during conversion to COFF, file invalid or corrupt
这是由于先安装Visual Studio 2012, 后安装Visual Studio 2010造成的,用VS2012的cvtres.exe替换掉VS2010的即可。这个文件在 \VC\bin和\VC\bin\amd64目录下。参考:http://stackoverflow.com/questions/12267158/failure-during-conversion-to-coff-file-invalid-or-corrupt