初学 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, 太大了
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", ] |
2
xiaoming1992 OP @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 下回来了,实在是不想下这个,太大了,公司电脑又太捞,但是没办法,应该是我太捞了,搞不来,算了算了,不折腾了。再次感谢 |
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 都装上了 |
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" } ] } |
5
xiaoming1992 OP 感谢感谢,那应该是我的 opencv 版本不对,因为是很久之前下的,写了一点图片处理相关的东西,当时用的 vs2019 跑的好好的,因为处理效果不好(程序太捞)就搁置了,然后又卸载了 vs,现在捡起来用 vscode 结果跑不起来了。。。
你说的那个 mingw-64 那个版本我应该(?)是下载过的,但是当时估计是 opencv 版本不对,仍然跑不起来,待会再试一试,再次感谢,现在愿意像你这么详细地给新人讲解这种基础问题的不多了 |
6
nannanziyu 2020-07-23 16:11:47 +08:00
@xiaoming1992
1. 不是的,opencv 版本不对,只会导致 link 失败,编译是会通过的 2. 你用的是 win32 thread 的 MinGW-64,所以会提示不存在 std::recursive_mutex |
7
nannanziyu 2020-07-23 16:19:00 +08:00
@xiaoming1992
绿框的是 posix thread 的 MinGW,编译 opencv 成功 红框的是用 win32 thread 的 MinGW,报错 std::recursive_mutex 不存在 |