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编译)

编译步骤

  1. 下载源代码

    可以到这里下载官方release代码 http://www.wireshark.org/download/src/, 或者根据http://www.wireshark.org/develop.html 的提示,使用SVN等工具从代码仓库获得代码。

  2. 安装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。

  3. 安装Python 2.7

    没什么说的,下载后安装即可,不过python的官网被和谐了。假设安装在C:\Python27目录。

  4. 修改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

  5. 检查编译工具是否就绪

    为了在命令行使用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
    --------------------------------------------------------------------------------

     

  6. 安装依赖库

    nmake -f Makefile.nmake setup
  7. 开始编译

    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

posted @ 2013-04-23 22:29  赵子清  阅读(2901)  评论(1编辑  收藏  举报