wireshark-2.0.3 开发编译

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大小左右。

你可能感兴趣的:(软件产品开发,开发环境)