VSCode中出现Eigen/Dense: No such file or directory错误求助
解决VSCode编译C++时「Eigen/Dense: No such file or directory」错误
问题复现
编译包含Eigen头文件的C++代码时,出现头文件找不到的错误,相关文件如下:
main.cpp
#include <iostream> #include <vector> #include <Eigen/Dense> int main(){ std::vector<int> vec = {5,4,9,1,3,5}; Eigen::MatrixXd my_matrix(2,3); my_matrix << 4,9,-7, 5,-4,11; return 0; }
c_cpp_properties.json
{ "configurations": [ { "name": "windows-gcc-x64", "includePath": [ "${workspaceFolder}/**", "D:\\Master Program\\Self-Driving-Cars_Udacity\\Part1\\Module_05_Sensor_Fusion\\eigen-3.4.0\\" ], "compilerPath": "C:/MinGW/mingw64/bin/gcc.exe", "cStandard": "${default}", "cppStandard": "${default}", "intelliSenseMode": "windows-gcc-x64", "compilerArgs": [ "" ] } ], "version": 4 }
tasks.json
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "C:\\MinGW\\mingw64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe", "-I", "D:\\Master Program\\Self-Driving-Cars_Udacity\\Part1\\Module_05_Sensor_Fusion\\eigen-3.4.0\\" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ], "version": "2.0.0" }
排查与解决步骤
1. 确认Eigen目录结构正确性
检查你指定的路径D:\Master Program\Self-Driving-Cars_Udacity\Part1\Module_05_Sensor_Fusion\eigen-3.4.0\下是否存在Eigen文件夹,且该文件夹内包含Dense.h文件(对应代码中的<Eigen/Dense>)。
- 如果路径下没有Eigen文件夹,说明你可能解压错误,或者路径指向层级不对。比如部分Eigen压缩包解压后会嵌套一层同名文件夹,此时正确路径应为
D:\Master Program\Self-Driving-Cars_Udacity\Part1\Module_05_Sensor_Fusion\eigen-3.4.0\eigen-3.4.0。
2. 处理路径中的空格问题
Windows路径中的空格容易导致编译解析失败,有两种解决方式:
- 方式一:用双引号包裹路径
修改tasks.json中的-I参数为:
同时修改"-I", "\"D:\\Master Program\\Self-Driving-Cars_Udacity\\Part1\\Module_05_Sensor_Fusion\\eigen-3.4.0\""c_cpp_properties.json中的includePath:"\"D:\\Master Program\\Self-Driving-Cars_Udacity\\Part1\\Module_05_Sensor_Fusion\\eigen-3.4.0\"" - 方式二:迁移到无空格路径
将Eigen文件夹移动到无空格的路径下,比如D:\eigen-3.4.0,然后同步修改两个配置文件中的路径。
3. 修正路径末尾的反斜杠
JSON中反斜杠是转义字符,当前路径末尾的\\已转义为单个反斜杠,但可尝试去掉末尾反斜杠,避免潜在解析问题:
// c_cpp_properties.json中修改为 "D:\\Master Program\\Self-Driving-Cars_Udacity\\Part1\\Module_05_Sensor_Fusion\\eigen-3.4.0" // tasks.json中修改为 "D:\\Master Program\\Self-Driving-Cars_Udacity\\Part1\\Module_05_Sensor_Fusion\\eigen-3.4.0"
4. 手动验证编译命令
打开终端,进入main.cpp所在目录,执行以下命令测试:
g++.exe -g main.cpp -o main.exe -I "D:\Master Program\Self-Driving-Cars_Udacity\Part1\Module_05_Sensor_Fusion\eigen-3.4.0"
- 如果手动执行成功,说明VSCode配置未生效,重启VSCode即可;
- 如果手动执行失败,回到步骤1确认Eigen目录结构。
5. 重启VSCode
修改配置文件后,重启VSCode让IntelliSense和编译任务加载新配置。
内容的提问来源于stack exchange,提问作者waleed alzamil
相关产品推荐
相关产品推荐

