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提供各平台编译过程中每一步的日志信息,如图所示
点击对应的步骤,就可以看到编译成功时输出的信息,然后与自己编译的输出信息对照,可以明确出错的问题是什么,避免走弯路。
对比后发现,本地的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
配置如图所示
重启VS2019,这时如果F5运行,还是报相同的错误。
选择 生成->清理解决方案
然后,生成->生成解决方案
清理并重新生成解决方案解决了问题。
最终,鲜活的wireshark在VS2019中运行出现了。
总结
无论在什么平台编译wireshark,主要步骤都类似。遇到错误时,参考wireshark提供的官方各平台编译的waterfalll的对应步骤的信息,对错误定位非常有用,避免走到错误的道路。
参考资料:
Unsupported major.minor version 52.0报错问题解决方案
QT5.9由于找不到qt5core.dll,无法继续执行代码,解决办法
VS2019中QT连接及使用