V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaoming1992
V2EX  ›  C++

vscode 怎么 include opencv2?

  •  
  •   xiaoming1992 · 2020-07-22 16:15:10 +08:00 · 2695 次点击
    这是一个创建于 1570 天前的主题,其中的信息可能已经有所发展或是发生改变。

    初学 cpp
    我把 opencv 下载到了一个单独的目录下

    cpp-libs
    |--opencv
    |--|--sources
    |--|--build
    |--|--|--bin
    |--|--|--x64
    |--|--|--include
    |--|--|--|--opencv2
    |--|--|--|--|--core
    |--|--|--|--|--|--core.hpp 等文件 /目录
    

    c_cpp_properties.json文件如下:

    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [
                    "${workspaceFolder}/**",
                    "${default}",
                    "C:/cpp-libs/opencv/build/include"
                ],
                "defines": [
                    "_DEBUG",
                    "UNICODE",
                    "_UNICODE"
                ],
                "compilerPath": "C:\\MinGW\\bin\\g++.exe",
                "cStandard": "c11",
                "cppStandard": "gnu++14",
                "intelliSenseMode": "clang-x86"
            }
        ],
        "version": 4
    }
    

    我在.cpp文件中引入opencv2如下:

    #include <opencv2/core/core.hpp>
    

    为什么 include 这个路径(C:/cpp-libs/opencv/build/include)还不够, F5 调试时依然提示 fatal error: opencv2/core/core.hpp: No such file or directory, includePath 到底应该是什么?

    ps: 没用 visual studio, 太大了

    7 条回复    2020-07-23 16:19:00 +08:00
    nannanziyu
        1
    nannanziyu  
       2020-07-23 11:45:32 +08:00   ❤️ 2
    @xiaoming1992
    c_cpp_properties.json 里的 inlucdePath 只用于 Code Intelligence
    你要在 tasks.json 里用 -I 参数来对 build 命令行增加 Include Path
    比如

    "command": "g++",
    "args": [
    "${file}",
    "-g",
    "-std=c++17",
    "-Wall",
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe",
    "-I",
    "C:/cpp-libs/opencv/build/include",
    ]
    xiaoming1992
        2
    xiaoming1992  
    OP
       2020-07-23 12:02:44 +08:00
    @nannanziyu 谢谢,确实是这样,在`tasks.json`中添加参数后就可以编译了。
    可是编译后又报`'recursive_mutex' in namespace 'std' does not name a type`错误,`stackoverflow`上有类似的问题[https://stackoverflow.com/questions/14191566/c-mutex-in-namespace-std-does-not-name-a-type]( https://stackoverflow.com/questions/14191566/c-mutex-in-namespace-std-does-not-name-a-type),当然 google 上有很多相关问题,但是大多都说是编译器的问题
    昨天试了一下,把 google 到的回答中推荐的编译器几乎都试了一下,还是不行,实在是搞不来了,又把 vs2019 下回来了,实在是不想下这个,太大了,公司电脑又太捞,但是没办法,应该是我太捞了,搞不来,算了算了,不折腾了。再次感谢
    nannanziyu
        3
    nannanziyu  
       2020-07-23 14:05:23 +08:00   ❤️ 1
    1. recursive_mutex 属于 posix thread,所以你的 gcc 要下载 posix thread 的
    比如用 MinGW-64
    https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/
    下载这个页面中的 x86_64-posix-seh
    2. opencv 也要下载对应的 build
    https://github.com/huihut/OpenCV-MinGW-Build,不然可以编译,但无法 link
    3. vs2019 很小,最小安装只要 800M 。大是因为你把 msvc 和 sdk 都装上了
    nannanziyu
        4
    nannanziyu  
       2020-07-23 14:13:47 +08:00   ❤️ 1


    task.json
    {
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
    {
    "label": "build",
    "type": "shell",
    "command": "g++",
    "args": [
    "${file}",
    "-g",
    "-std=c++17",
    "-Wall",
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe",
    "-I",
    "F:/Download/OpenCV-MinGW-Build-OpenCV-4.1.1-x64/include",
    "-LF:/Download/OpenCV-MinGW-Build-OpenCV-4.1.1-x64/x64/mingw/lib",
    "-llibopencv_core411",
    "-llibopencv_imgcodecs411",
    "-llibopencv_highgui411"
    ]
    }
    ]
    }

    launch.json
    {
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "name": "(gdb) Launch",
    "type": "cppdbg",
    "request": "launch",
    "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
    "args": [],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole": false,
    "MIMode": "gdb",
    "miDebuggerPath": "gdb",
    "setupCommands": [
    {
    "description": "Enable pretty-printing for gdb",
    "text": "-enable-pretty-printing",
    "ignoreFailures": true
    }
    ],
    "preLaunchTask": "build"
    }
    ]
    }
    xiaoming1992
        5
    xiaoming1992  
    OP
       2020-07-23 16:01:09 +08:00 via Android
    感谢感谢,那应该是我的 opencv 版本不对,因为是很久之前下的,写了一点图片处理相关的东西,当时用的 vs2019 跑的好好的,因为处理效果不好(程序太捞)就搁置了,然后又卸载了 vs,现在捡起来用 vscode 结果跑不起来了。。。

    你说的那个 mingw-64 那个版本我应该(?)是下载过的,但是当时估计是 opencv 版本不对,仍然跑不起来,待会再试一试,再次感谢,现在愿意像你这么详细地给新人讲解这种基础问题的不多了
    nannanziyu
        6
    nannanziyu  
       2020-07-23 16:11:47 +08:00
    @xiaoming1992
    1. 不是的,opencv 版本不对,只会导致 link 失败,编译是会通过的
    2. 你用的是 win32 thread 的 MinGW-64,所以会提示不存在 std::recursive_mutex

    nannanziyu
        7
    nannanziyu  
       2020-07-23 16:19:00 +08:00
    @xiaoming1992

    绿框的是 posix thread 的 MinGW,编译 opencv 成功
    红框的是用 win32 thread 的 MinGW,报错 std::recursive_mutex 不存在
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2529 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.