【原创】Wireshark2.0.1在VS2013编译实战

 

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

image

3.2 离线安装(已有离线安装包)

image

image

image

安装cygwin时,一些必要的tools(如bison, flex, wget等等)默认是不安装的,需要手动安装

1、 点击,将Default切换到install.

image

image

 

2、 在Search框搜索以下项,添加。

image

image

 

点击下一步后,进行安装。

3.3 在线安装

image

后面同离线安装

4 安装Python

4.1 下载

http://python.org/download/

image

4.2 安装

全默认安装!!不要修改安装路径!!!安装在C盘!!

4.3 注意事项

请下载Python2.7版本!!!最好安装python2.7 到C:\ 否则需要手动更改config.nmake中python配置

5 安装QT

5.1 下载

http://www.qt.io/download-open-source/

image

5.2 安装

全默认安装!!不要修改安装路径!!!安装在C盘!!

6 Wireshark源码

6.1 下载

https://www.wireshark.org/download.html

image

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

image

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 查询目录

image

7.2.1.2 设置

image

7.2.2 MSVC_VARIANT

MSVC_VARIANT=MSVC2013

image

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问题

image

解决:手动创建此文件,并根据提示写上内容,一般是一个日期字符串,如2015-12-11。

image

7.4.3 找不到wget

image

解决办法

缺少wget.重新安装cygwin.重点检查wget是否选择

7.4.4 找不到unzip

image

解决办法

缺少unzip.重新安装cygwin.重点检查unzip是否选择

7.4.5 正确结果

image

7.5 安装依赖库

7.5.1 命令

nmake -f Makefile.nmake setup

7.5.2 在线安装

输入命令即可

7.5.3 离线安装

输入命令,得到如下提示:

image

我们提取到svn链接

http://anonsvn.wireshark.org/wireshark-win32-libs/tags/2015-12-11/packages

利用TortoiseSVN下载包

image

将下载的包放到(也就是刚才缺少current_tag.txt的目录)

image

重新运行

nmake -f Makefile.nmake setup

image

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

image

解决方法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出错(不是内部命令,也不是可运行的程序)

image

表面上是rc执行出错。

我们找到目录Wireshark-win32-libs-2.0\zlib-1.2.8-ws。里面有个Makefile.in文件。打开并搜索rc

image

再次搜索ARFLAGS

image

再次搜索AR

image

由此可见,是由于ar命令没有找到,导致rc前移。成了命令

解决办法:

将C:\cygwin\bin添加到系统配置PATH中。

7.7.4 找不到kernel32.lib

image

解决办法:

将C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib添加到系统配置LIB中。

7.7.5 找不到winver.h

image

解决办法:

将C:\Program Files\Microsoft SDKs\Windows\v7.1A\ Include添加到系统配置INCLUDE中。

7.7.6 编译wiretap出错(不是内部命令,也不是可运行的程序)

image

表面上是rc执行出错。

我们找到目录wireshark-2.0.1\wiretap。里面有个Makefile.nmake文件。打开并搜索-d

image

由此可见,是由于YACC 命令没有找到,导致-d 前移。成了命令

解决办法

缺少yacc.重新安装cygwin.重点检查bison是否选择

7.7.7 qt文件夹找不到Makefile

image

解决方法:

原因是qmake时间过长,导致超时。只要需要进行ui/qt目录下。将命令执行一下就行了

image

7.8 编译后变化

image

 

8 其他

8.1 Cygwin离线包制做

image

image

 

image

image

image

 

点击下一步。直到下载完成。

image

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

image

怎么设置环境变量也没有用

image

只能

C:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib

拷贝到

C:\Program Files\Microsoft Visual Studio 12.0\VC\lib

posted @ 2016-04-12 20:04  xiaoleisme  阅读(1903)  评论(1编辑  收藏  举报