Ubuntu编译Wireshark 1.9.2遇CMake未知语言错误,求解决方案
解决Wireshark 1.9.2在Ubuntu下cmake编译报错问题
错误原因
Wireshark 1.9.2是较旧版本(发布于2013年),其cmake适配脚本与新版cmake(如你使用的3.16)存在兼容性冲突。具体是cmake/modules/FindGLIB2.cmake第241行调用CHECK_INCLUDE_FILES时使用了带引号的"C"作为语言参数,而cmake 3.16的CMP0054政策未设置的情况下,带引号的字符串会被当作变量解析(而非直接识别为语言标识),导致CheckIncludeFiles.cmake无法识别有效语言,触发报错。
解决方案
方案1:修改Wireshark源码中的cmake脚本
- 打开Wireshark源码目录下的
cmake/modules/FindGLIB2.cmake文件 - 定位到第241行,找到类似如下的代码:
CHECK_INCLUDE_FILES("glib.h" HAVE_GLIB_H "C") - 将其中的
"C"改为不带引号的C,修改后代码:CHECK_INCLUDE_FILES("glib.h" HAVE_GLIB_H C) - 保存文件后,重新执行
cmake ..即可
方案2:降级cmake到兼容版本
由于Wireshark 1.9.2设计时对应的cmake版本较低,你可以安装与该版本兼容的cmake版本(如2.8.x系列):
- 卸载当前cmake:
sudo apt remove --purge cmake - 安装cmake 2.8:
sudo apt install cmake=2.8.12.2-0ubuntu3 - 验证版本:
cmake --version - 重新进入build目录执行
cmake ..
内容的提问来源于stack exchange,提问作者Dying Falcon
相关产品推荐
相关产品推荐

