一、我的环境

我是wsl2下的Ubuntu22.4,配置OpenCV4.8.0

二、出现问题

1.编译器(g++)找不到 OpenCV 的头文件

正在启动生成...

/usr/bin/g++ -std=c++17 -g

/home/hamburger/Energy_mechanism/test.cpp -o /home/hamburger/Energy_mechanism/test '`pkg-config --cflags --libs opencv4`' -Wall -Wextra /home/hamburger/Energy_mechanism/test.cpp:1:10: fatal error: opencv2/opencv.hpp: No such file or directory

1 | #include <opencv2/opencv.hpp>

| ^~~~~~~~~~~~~~~~~~~~

compilation terminated.

解决办法一:

1、首先先验证OpenCV 安装正常

把下面复制到终端

pkg-config --cflags --libs opencv4

如果出现类似 -I/usr/local/include/opencv4  -L/usr/local/lib -lopencv_core 。则说明安装正常

如果出现 Package opencv4 was not found in the pkg-config search path. → OpenCV 没装 / 没配置 pkg-config 路径。(在tasks.json中使用了pkg-config)。

下面是我头文件报错时用的tasks.json,谨慎参考

{
    "tasks": [
        {
            "label": "C/C++: g++ build active file",  // 保持和launch.json一致的名称
            "type": "shell",                          // 关键:改成shell类型,支持执行pkg-config命令
            "command": "/usr/bin/g++",                // 编译器路径
            "args": [
                "-std=c++17",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "`pkg-config --cflags --libs opencv4`",  // pkg-config命令(shell类型支持)
                "-Wall",
                "-Wextra"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": ["$gcc"],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Build C++ file with OpenCV support (shell mode)"
        }
    ],
    "version": "2.0.0"
}

也许你问豆包,豆包会说VS Code 还是把 pkg-config --cflags --libs opencv4单引号包起来了(终端进程那行显示 'pkg-config ...'),导致编译器依然没执行这个命令,只是把它当成了无效参数,基本是扯淡,重新执行还会报错。

2、检查头文件是否真的存在
ls /usr/local/include/opencv4/opencv2/opencv.hpp

如果输出 /usr/local/include/opencv4/opencv2/opencv.hpp → 头文件存在;

如果输出 No such file or directory → OpenCV 安装路径不对

3、修正 c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include",
                "/usr/include/opencv4",         //根据你自身安装路径修改
                "/usr/local/include/opencv4/**"
            ],
            "compilerPath": "/usr/bin/g++",
            "cStandard": "gnu11",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "linux-gcc-x64",
            "browse": {
                "path": [
                    "${workspaceFolder}/**",
                    "/usr/include/**",
                    "/usr/local/include/**"
                ],
                "limitSymbolsToIncludedHeaders": true
            }
        }
    ],
    "version": 4
}

如果运行后还是标红,再往后看

解决方法二:

1、打开Ubuntu终端
# 用图形编辑器
gedit ~/.bashrc

# 如果 gedit 打不开(无图形化),用 vim 编辑
vim ~/.bashrc
2、在 ~/.bashrc 最后一行添加环境变量
export CPLUS_INCLUDE_PATH=/usr/include/opencv4:/usr/local/include/opencv4:$CPLUS_INCLUDE_PATH

保存退出后

验证是否成功
source ~/.bashrc
echo $CPLUS_INCLUDE_PATH

2、编译命令里的 -I 参数写法错了

这是我朋友遇到的问题:

*  正在执行任务: /usr/bin/g++ -std=c++17 -Wall -Wextra -g /home/hamburger/Energy_mechanism/*.cpp -o /home/hamburger/Energy_mechanism/main -I /home/hamburger/Energy_mechanism /usr/include/opencv4 -L /usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_videoio 

/home/hamburger/Energy_mechanism/test.cpp:1:10: fatal error: opencv2/opencv.hpp: No such file or directory
    1 | #include <opencv2/opencv.hpp>
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.

 *  终端进程“/bin/bash '-c', '/usr/bin/g++ -std=c++17 -Wall -Wextra -g /home/hamburger/Energy_mechanism/*.cpp -o /home/hamburger/Energy_mechanism/main -I /home/hamburger/Energy_mechanism /usr/include/opencv4 -L /usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_videoio'”启动失败(退出代码: 1)。 
 *  终端将被任务重用,按任意键关闭。 

说明tasks.json文件配置有问题

-I 是「指定头文件搜索路径」的参数,必须和路径紧挨着(无空格)

所以必须像这样:

"-I",
"${workspaceFolder}",
"-I",
"/usr/include/opencv4",

ok,至此应该可以解决头文件报错问题

更多推荐