wireshark-2.0.3...... 编译 (vc2010)...... nmake 命令窗(vc2010)编译 wireshark-2.0.3
~、用VS2010命令窗口方式
编译,参照 wireshark-2.0.0rc2 编译
。
------------
编译环境搭建、路径调整
。
(*) 环境设置。
env.bat
拷贝。 路径调整:
WIRESHARK_BASE_DIR
源工程路径修改。
path-add.bat
拷贝。路径调整:略。
(*)依赖库的压缩包拷贝。
注意,第一次最好要在工程新位置的对应目录下全部重新解压一次。
特别是 Wireshark-win64-libs-2.0\zlib-1.2.8-ws.zip 压缩包,把里面的"zconf.h"再度解压出来,经常报错找不着它。
依赖库的压缩包直接拷贝、调整;并重新解压(至少一次)。
将wireshark-2.0.0rc2\Wireshark-win32-libs-2.0 下的各个依赖库压缩包 拷到 wireshark-2.0.3 对应目录下。
调整3个地方:
current_tag.txt : 里面的日期改为 2016-04-07
USBPcapSetup-1.1.0.0-g794bf26-3.exe //同个版本的拷贝、改名
USBPcapSetup-1.1.0.0-g794bf26.exe
user-guide-g7ea0d6c.zip
user-guide-gdf2fcdf.zip
(*) 工程配置修改
。
开始编译
用"VS2010命令提示"进入CMD,运行
env.bat
。然后进去Wireshark目录,开始编译过程。
1、nmake -f Makefile.nmake verify_tools : 检验编译工具链
2、nmake
-f Makefile.nmake setup
:
下载编译依赖包
3、nmake
-f Makefile.nmake distclean
:
清除上次编译内容
4、nmake -f Makefile.nmake all : 全新编译
nmake -f Makefile.nmake "模块" 指定模块编译
5 nmake -f Makefile.nmake packaging : 制作安装包 //下载NSIS安装先
编译注意: 编译注意处
。
CMake 生成wireshark-2.0.3的vc++解决方案与编译
~、利用CMake 导出vc++工程并编译+单步调试(开发时推荐),参照官方文档 developer-guide-us.pdf ,节2.2.11 。
打开一个控制台窗口,在工程根目录下:
新建一个目录(如build-qt5),作为CMake的工作目录,存放其导出的vc工程文件,也是编译统一输出的目录;
进入此目录(如wireshark-2.0.3\build-qt5),执行:
env.bat
// 注,批处理中的路径 须作相应调整;
path-add.bat
工程配置修改
中的"工具链路径修改"先。 // 配置修改后,再执行cmake ;cmake生成过程中 同时下载依赖库
cmake -DENABLE_CHM_GUIDES=on -G "Visual Studio 10" ../
//如果选择64位的vc2015,则: cmake -DENABLE_CHM_GUIDES=on -G "Visual Studio 14
Win64
" ../
//注,cmake选择哪一版本的vc编译器,用参数指定。
//PS: 依赖库可手动下载,地址如wireshark-2.1.0的是: https://anonsvn.wireshark.org/wireshark-win32-libs/tags/2016-05-10/packages/
很快生成导出 77 个 vc2010 的工程文件,供编译使用。
-----------------
注意:
(*)路径或宏定义的值中,不要含有汉字,否则cmake生成导出的vc工程文件会出现乱码,项目加载失败的情况。
如 env.bat 中有个宏定义:
WIRESHARK_VERSION_EXTRA=-科利兴邦.Ltd.cn
生成出来的 epan.vcxproj 就含有乱码:
... advapi32.lib;..\run\Debug
(*)若进入 其它 目录下,再用源工程所在的绝对路径,导出的工程有问题,各自的源文件或头文件等打不开。例如:
E:\cmake-3.5.2-x86\bin> cmake -DENABLE_CHM_GUIDES=on -G "Visual Studio 10" E:\LAB\coder\wireshark-2.0.3
Qt Creator 编译ui之qt 部分
~、先用vc2010命令窗口方式编译成功,生成如下配置文件、资源文件后,再在QT自己的IDE环境 Creator中,打开工程文件 ui\qt\Wireshark.pro ,即可编译、调试。
在Qt Creator中调试,方便"转到槽",即从界面ui控件上直接转到对应的控件响应函数中去。
ui\qt\config.pri
config.h
image\capinfos.rc
image\captype.rc
image\dumpcap.rc
image\editcap.rc
image\libwireshark.rc
image\libwsutil.rc
image\mergecap.rc
image\rawshark.rc
image\reordercap.rc
image\text2pcap.rc
image\tfshark.rc
image\tshark.rc
image\wireshark.rc
image\wiretap.rc
工程配置修改点
~、
(*)工具链路径修改
config.nmake :
!IF DEFINED(PYTHON_VER)
PYTHON_DIR=D:\ProgramAssist\Script\Python25
!ENDIF
!ENDIF
(*)依赖库的重复检测、解压过程 视情况屏蔽掉。
安装依赖库时(即"nmake -f Makefile.nmake setup"),默认是将上一次已解压的依赖库先行全部删除,再重新解压。
Makefile.nmake 。 setup:verify_tools
clean_setup
process_libs //"clean_setup":删除已存在的依赖库目录
tools\win-setup.sh : 临时去掉这段 解压脚本
,避免依赖库重复解压。
"nmake -f Makefile.nmake all" 重复编译,倒不会重复此解压过程。
win-setup.sh 中解压脚本段
脚本"tools/win-setup.sh" 配置中,解压过程:
echo "Extracting '$PKG_PATH/$PACKAGE' into '$PKG_PATH/$DEST_SUBDIR'"
if [[ "$PACKAGE" == *.zip ]] ; then
unzip -oq "$PKG_PATH/$PACKAGE" ||
err_exit "Couldn't unpack '$PKG_PATH/$PACKAGE'"
echo "Verifying that the DLLs and EXEs in $DEST_SUBDIR are executable."
# XX: Note that find will check *all* dlls/exes in DEST_SUBDIR and below
# which may be more than those just unzipped depending upon DEST_SUBDIR.
# This may cause extra repeated checks but will do no harm.
for i in $(/usr/bin/find . \( -name '*\.dll' -o -name '*\.exe' \)) ; do
if [ ! -x "$i" ] ; then
echo "Changing file permissions (add executable bit) to:"
echo "$i"
chmod a+x "$i"
fi
done
fi
编译注意处
~、 一些编译注意点
(*)编译qt模块时注意
当更换VS版本、Qt版本时,ui\qt\config.pri 文件要删除或改名 否则报错VC版本号不匹配 停止编译。报错信息如下。
config.h(266) : fatal error C1189: #error : Your MSVC_VARIANT setting in config.nmake doesn't match the MS compiler version!
_MSC_VER is:1800 but required is:1900
(*)勿给工程中途变换路径。
如工程路径原来是E:\LAB\wireshark-2.0.3, 当用CMake工具生成vc的编译工程后,工程迁移到新路径下,为E:\LAB\ztttp\wireshark-2.0.3,
会导致编译失败--不管是用vs ide编译、或在Qt Creator 中编译、或用vs 的命令行方式编译,原因是各种头文件找不到报错。
因为,CMake生成的vc工程文件中、Makefile文件(如
wireshark-2.0.3
\ui\qt\Makefile)中配置的包含路径、库路径等大都是绝对路径。
注意,改了工程名字,也是改变了工程路径,如"
wireshark-2.0.3
"变成了"
wireshark-2_0_3
".
(*)全部清除上一次的编译结果,会把config.h 、 image目录下的*.res 资源全删掉,等下一次全部重新编译时,才会重新生成;
以及删除 Wireshark-win32-libs-2.0\zlib-1.2.8-ws\zconf.h, 此时继续编译要重新解压它一次。
()再进行单模块直接编译 总会报一些错。
如,
nmake -f Makefile.nmake distclean
nmake -f Makefile.nmake epan 时报错:
ascend_scanner.c
ascend_scanner.l(33) : fatal error C1083: 无法打开包括文件:"config.h": No such file or directory
NMAKE : fatal error U1077: ""d:\Microsoft Visual Studio 10.0\VC\BIN\cl.EXE"": 返回代码"0x2"
() 即使再全部重编 也会出现莫名其妙错 不去理会 编译命令多执行几次。
path-add.bat
~、创建批处理命令脚本,便于在编译目标项目的当个控制台窗口中,临时增加需要的工具链路径、或包含路径、库路径等。
path-add.bat :
增加cmake 路径.
指定Qt版本的DLL库路径(用到的dll库会自动拷贝到
build-qt561-x64
\run\Debug),若不指定,会取值为系统环境变量path中的(第一个)Qt版本的dll库的路径,当机器上安装了多个QT版本时,最好设定一下。
PS: cmake 工具本身用64位、32位无关紧要 。
划线处"
build-qt561-x64
"目录为自建目录,为编译统一输出目录。
(*) Qt 用 64位版
例一:
path=E:\LAB\softgreen\ProgAssist\Compile\cmake-3.5.2\bin;D:\Qt\Qt5.6.1_x64\5.6\
msvc2015_64
\
bin
;%path%
例二:
path=E:\LAB\softgreen\ProgAssist\Compile\cmake-3.6.0-rc2-x64\bin;D:\Qt\Qt5.6.1_x64\5.6\msvc2015
_64
\bin;%path%
(*)Qt 用 32位版本
path=E:\LAB\softgreen\ProgAssist\Compile\cmake-3.5.2\bin;D:\Qt\Qt5.3.1\5.3\
msvc2010_opengl\bin
;%path%
----------------------------
注意地方--
()不要将 Cygwin 的路径置指定的于 VS 之前,否则工具链中的 link.exe 会认错路--导致链接失败。如:
正确路径-- link: /cygdrive/c/Program Files/Microsoft Visual Studio 10.0/VC/BIN/link
错误路径-- link: /usr/bin/link
正确路径-- unzip: /usr/bin/unzip (要cygwin 路径下的: 解压依赖库失败,unzip命令执行报错
)
错误路径-- unzip: /cygdrive/e/Oracle/product/11.2.0/dbhome_1/bin/unzip
()不同机器上的path环境变量设置不同,在对工具链进行 "verify_tools"时, 有些路径的输出不一定是"正确",不过能兼容能编下去就行。
如Z470本开发机器( win7-x86)上的:
python: /cygdrive/e/Program Files/OpenOffice 4/program/python //最后应是用"config.nmake"中配置的,这里输出的不算
env.bat
~、创建env.bat ,方便初始化环境变量。
(*) Lenovo E130 , 编译
32位
的
wireshark-2.0.0rc2
set CYGWIN=D:\cygwin
set CYGWIN_PATH=D:\cygwin\bin
set WIRESHARK_BASE_DIR=E:\LAB\ztttprj\coder\wireshark-2.0.0rc2
set WIRESHARK_TARGET_PLATFORM=win32
set QT5_BASE_DIR=D:\Qt\Qt5.3.1\5.3\msvc2010_opengl
set WIRESHARK_VERSION_EXTRA=-FZFXM.Ltd.cn
set VisualStudioVersion=10.0
(*)Lenovo E130 , 编译
64位
的
wireshark-2.1.0
set CYGWIN=D:\cygwin
set CYGWIN_PATH=D:\cygwin\bin
set WIRESHARK_BASE_DIR=E:\LAB\opengnu\Wireshark\
wireshark-2.1.0
set WIRESHARK_TARGET_PLATFORM=
win64
set
PLATFORM=x64
set QT5_BASE_DIR=D:\Qt\
Qt5.6.1_x64\5.6\msvc2015_64
set WIRESHARK_VERSION_EXTRA=-FZFXM.Ltd.cn
set VisualStudioVersion=
14.0
编译结果
比较工具: Beyond Compare 4.1.1 - x64
选取案例:
编译场景一:在32位样机上,安装32位版本的Qt库环境
编译场景二:在64位样机上,安装64位版本的Qt库环境
------------
debug / release 版本对比
wireshark-qt-debug //Qt Creator 编译生成的debug版
wireshark-qt-release //nmake 编译生成的release版
默认编译的这两个版本,二者没有什么不同 :
用到的Qt库全部一样。 debug模式 没有使用Qt库里debug模式生成的库 ,跟release模式使用的Qt库全部一样;
使用到的所有的DLL库、各个配置目录全都一样;
Wireshark.exe 自身也都一样;
Wireshark.pdb 调试信息文件略有不同,但都是32MB大小左右。