1.编译环境

  • Windows10 +
  • Vs2019
  • Qt5.12
  • Python3

2.官方教程

wireshark提供windows平台的编译方法,点此查看

3.遇到的问题

3.1 cmake错误

理论上安装官方教程基本不会出错,但是在 2.2.12. Generate the build files中的第一步

cmake -G "Visual Studio 16 2019" -A x64 ..\wireshark

就出现报错。

cmake命令会输出很长一串输出,如果cmake失败,关键是区别定位哪些是导致cmake失败的信息,笔者起初关注的错误方向不对,耗费了大量的时间解决不必要的错误,例如:

...
-- Looking for setresuid - not found
-- Looking for strptime
-- Looking for strptime - not found
-- Performing Test HAVE_STRUCT_SOCKADDR_SA_LEN
-- Performing Test HAVE_STRUCT_SOCKADDR_SA_LEN - Failed
-- Performing Test HAVE_STRUCT_STAT_ST_FLAGS
...

这种信息,只有没有明显的提示Error,错误并不会影响到cmake,直接忽略就好。

非常有用的一点是wireshark提供各平台编译过程中每一步的日志信息,如图所示

wireshark c语言版 wireshark源码编译_wireshark

点击对应的步骤,就可以看到编译成功时输出的信息,然后与自己编译的输出信息对照,可以明确出错的问题是什么,避免走弯路。

对比后发现,本地的cmake输出比价明显的一个错误是关于Asciidoctor的错误,这个对应之前choco安装的asciidoctorj:

java.lang.UnsupportedClassVersionError: ***: Unsupported major.minor version 52.0

这个错误在wireshark的编译日志里面显然没有这个错误。我在powershell中直接输出asciidoctorj命令,也会报相同的错误。那基本上就是这个工具的问题。

查阅资料,这个错误产生的原因是asciidoctorj这个工具发布时使用jdk的版本和我本机版本不一致或者不兼容导致。

想想本地的JDK还是1.8版本,而choco安装asciidoctorj默认都是最新版本,可能是JDK版本过低导致,于是我重新下载安装JDK9.0,并配置环境变量。

果然,cmake通过了。

接下来就是

msbuild /m /p:Configuration=RelWithDebInfo Wireshark.sln

生成VS2019工程。

3.2 Qt lib库依赖错误

VS2019打开该工程,并F5运行是,报错弹窗

由于找不到Qt5Multimedia Qt5PrintSupportd.dll 无法继续执行代码

参考资料后,通过配置Qt的环境变量解决。

3.3 Qt vs2019插件错误

接着,运行时遇到弹窗错误:

This application failed to start because no Qt platform plugin could be initialized  VS2019

通过VS2019->扩展->管理扩展->联机->搜索Qt,选择安装Qt Visual Stdio Tools插件

然后,VS2019->扩展->Qt vs tool->Qt options,添加Qt的路径,例如我的是

C:\Qt\5.12.2\msvc2017_64

配置如图所示

wireshark c语言版 wireshark源码编译_Windows_02

重启VS2019,这时如果F5运行,还是报相同的错误。

选择 生成->清理解决方案

然后,生成->生成解决方案

清理并重新生成解决方案解决了问题。

最终,鲜活的wireshark在VS2019中运行出现了。

wireshark c语言版 wireshark源码编译_Qt_03

 

总结

无论在什么平台编译wireshark,主要步骤都类似。遇到错误时,参考wireshark提供的官方各平台编译的waterfalll的对应步骤的信息,对错误定位非常有用,避免走到错误的道路。

参考资料:

wireshark官方文档

Unsupported major.minor version 52.0报错问题解决方案

QT5.9由于找不到qt5core.dll,无法继续执行代码,解决办法

VS2019中QT连接及使用