如何修复 WSL 上的智能感知'A definition for the symbol could not be located'

How to fix intellisense 'A definition for the symbol could not be located' on WSL

本文关键字:symbol the for could not located be definition 智能 感知 WSL      更新时间:2023-10-16

我正在Visual Studio 2017中构建一个解决方案,我们在WSL上为ARM64目标进行交叉编译。

我已经设置了所有包含路径,编译似乎适用于这个特定的文件。有问题的标头位于W:\驱动器上,该驱动器是WSL文件系统

在文件顶部的#include行,我可以单击有问题的标题(),然后右键单击以打开文档。这打开了正确的标题,我的定义在这个新打开的文档中。Intellisense对此文件似乎无法正常工作,因为似乎没有正确突出显示任何枚举或定义。

但是,如果我要使用我的.c文件中的定义,并尝试转到该定义,我会得到一个"无法找到符号'V4L2_PIX_FMT_HEVC'的定义">

当将有问题的标头移动到C:\驱动器并将包含路径更改为相应的新路径时,Intellisense似乎可以识别定义,并且"转到定义"正常工作

#include <linux/videodev2.h> //Open document works
#include <linux/v4l2-controls.h> //Open document works
...
case UDP_VIDEO_PROTOCOL_MPEG2:
codec = V4L2_PIX_FMT_MPEG2; //Go to definition does not work
break;
case UDP_VIDEO_PROTOCOL_H265:
codec = V4L2_PIX_FMT_HEVC; //Go to definition does not work

看起来问题源于在WSL中创建的文件无法使用Intellisense

https://developercommunity.visualstudio.com/content/problem/259166/intellisense-not-working-for-files-created-under-w.html

显然,在撰写本文时,这个问题本应在Visual Studio 2019中得到解决,但我还无法进行测试。为了解决这个问题,将我的工作场所切换到visual studio的预览版并不容易。

在VS 2019中,我可以通过删除CMake缓存然后重建解决方案来解决这个问题:Project>CMake缓存>删除缓存。我们不再使用VS项目文件。如果您仍在使用VS项目文件,则可能会进行类似的重置。

相关文章: