原文出自 http://www.cnblogs.com/xiaole10368/p/5384082.html
1 环境
Microsoft Visual Studio 2013
Cygwin2.873
Python 2.7
Wireshark2.0.1
QT5.5.1
2 安装Microsoft Visual Studio
正常下载,全部安装。
3 安装Cygwin
3.1 下载
http://cygwin.com/install.html
3.2 离线安装(已有离线安装包)
安装cygwin时,一些必要的tools(如bison, flex, wget等等)默认是不安装的,需要手动安装
1、 点击,将Default切换到install.
2、 在Search框搜索以下项,添加。
点击下一步后,进行安装。
3.3 在线安装
后面同离线安装
4 安装Python
4.1 下载
4.2 安装
全默认安装!!不要修改安装路径!!!安装在C盘!!
4.3 注意事项
请下载Python2.7版本!!!最好安装python2.7 到C:\ 否则需要手动更改config.nmake中python配置
5 安装QT
5.1 下载
http://www.qt.io/download-open-source/
5.2 安装
全默认安装!!不要修改安装路径!!!安装在C盘!!
6 Wireshark源码
6.1 下载
https://www.wireshark.org/download.html
7 编译过程
7.1 系统配置
LIB
C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib
INCLUDE
C:\Program Files\Microsoft SDKs\Windows\v7.1A\Include
PATH
C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin;C:\cygwin\bin
7.2 Config.nmake配置
7.2.1 QT5_BASE_DIR
QT5_BASE_DIR=C:/Qt/Qt5.5.1/5.5/msvc2013
7.2.1.1 查询目录
7.2.1.2 设置
7.2.2 MSVC_VARIANT
MSVC_VARIANT=MSVC2013
7.2.3 其他配置(可选)
WIRESHARK_LIBS
设置编译wireshark所需的库所在的目录,默认即可。
PROGRAM_FILES
设置本机程序安装目录,默认即可。
CYGWIN_PATH
将其设置为cygwin的bin目录,例如D:\cygwin\bin。默认即可。
WIRESHARK_TARGET_PLATFORM
编译程序的位数
VERSION_EXTRA
加入自定义版本号, 如"-myversion"
PYTHON 及其后的PATH
将其修改问自己安装的Python文件目录即可。
以DEBUG方式编译wireshark: (http://wiki.wireshark.org/Development/Tips)
# Linker flags
# /DEBUG generate debug info
LOCAL_LDFLAGS=/DEBUG
7.3 Bat脚本
为了在命令行使用VC++编译工具,需要在编译前执行VC++自带的环境设置脚本,这个脚本在 C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat。前者调用的是后者。 可以写一个bat文件,内容如下,每次编译前执行这个文件,以构建VC++编译工具链运行环境。
@echo off echo 设置 Visual Studio environment... "C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat" title Command Prompt (MSVC++ 2013) |
7.4 检查编译工具是否就绪
7.4.1 命令
nmake -f Makefile.nmake verify_tools
7.4.2 current_tag问题
解决:手动创建此文件,并根据提示写上内容,一般是一个日期字符串,如2015-12-11。
7.4.3 找不到wget
解决办法
缺少wget.重新安装cygwin.重点检查wget是否选择
7.4.4 找不到unzip
解决办法
缺少unzip.重新安装cygwin.重点检查unzip是否选择
7.4.5 正确结果
7.5 安装依赖库
7.5.1 命令
nmake -f Makefile.nmake setup
7.5.2 在线安装
输入命令即可
7.5.3 离线安装
输入命令,得到如下提示:
我们提取到svn链接
http://anonsvn.wireshark.org/wireshark-win32-libs/tags/2015-12-11/packages
利用TortoiseSVN下载包
将下载的包放到(也就是刚才缺少current_tag.txt的目录)
重新运行
nmake -f Makefile.nmake setup
7.6 清理
7.6.1 命令
nmake -f Makefile.nmake distclean
7.7 开始编译
7.7.1 命令
nmake -f Makefile.nmake all
7.7.2 找不到win32.mak
解决方法1:
把 ..Microsoft SDKs\Windows\v7.1A\Include下的win32.mak拷贝到..Microsoft Visual Studio 12.0\VC\include下
解决方法2:
把 ..Microsoft SDKs\Windows\v7.1A\Include路径添加到系统变量INCLUDE中
7.7.3 编译zlib出错(不是内部命令,也不是可运行的程序)
表面上是rc执行出错。
我们找到目录Wireshark-win32-libs-2.0\zlib-1.2.8-ws。里面有个Makefile.in文件。打开并搜索rc
再次搜索ARFLAGS
再次搜索AR
由此可见,是由于ar命令没有找到,导致rc前移。成了命令
解决办法:
将C:\cygwin\bin添加到系统配置PATH中。
7.7.4 找不到kernel32.lib
解决办法:
将C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib添加到系统配置LIB中。
7.7.5 找不到winver.h
解决办法:
将C:\Program Files\Microsoft SDKs\Windows\v7.1A\ Include添加到系统配置INCLUDE中。
7.7.6 编译wiretap出错(不是内部命令,也不是可运行的程序)
表面上是rc执行出错。
我们找到目录wireshark-2.0.1\wiretap。里面有个Makefile.nmake文件。打开并搜索-d
由此可见,是由于YACC 命令没有找到,导致-d 前移。成了命令
解决办法
缺少yacc.重新安装cygwin.重点检查bison是否选择
7.7.7 qt文件夹找不到Makefile
解决方法:
原因是qmake时间过长,导致超时。只要需要进行ui/qt目录下。将命令执行一下就行了
7.8 编译后变化
8 其他
8.1 Cygwin离线包制做
点击下一步。直到下载完成。
8.2 bash.EXE错误
wireshark需要的mt.exe是windows自带的SDK里的,在目录
C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin
里,不是cygwin里的。环境变量里配置的如果是指向cygwin\bin下的mt, 在verify_tools(#nmake -f makefile.nmake verify_tools)时会提示找不到mt, 且报错如下:
NMAKE : fatal error U1077: 'D:\cygwin\bin\bash.EXE' : return code '0x1'
所以,设置环境变量PATH时,要把
C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin
放在前面。
8.3 No such file or directory unix2dos
编译时出错: 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源代码目录的同级目录所致,把它设为源代码目录的子目录后问题消失。
8.4 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
8.5 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
9 Cmake生成vcxproj
9.1 命令
cmake -DENABLE_CHM_GUIDES=on -G "Visual Studio 12" -DCMAKE_C_COMPILER="C:/Program Files/Microsoft Visual Studio 12.0/VC/bin/cl.exe"
9.2 找不到kernal32.lib
怎么设置环境变量也没有用
只能
将
C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib
拷贝到
C:\Program Files\Microsoft Visual Studio 12.0\VC\lib