【问题标题】:Mutex is not a member of cv, compilation with g++ failsMutex 不是 cv 的成员,用 g++ 编译失败
【发布时间】:2019-10-17 06:12:55
【问题描述】:

我正在尝试设置 OpenCV,一些基本代码可以从它开始,看看我能做什么。但是每次我尝试编译应用程序时,我都会收到错误消息 'Mutex' is not a member of 'cv'。尝试了其他一些解决方案,例如。 this

我的环境是 VS Code,c_cpp_properties.json 设置如下:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}",
                "C:\\MinGW\\lib\\gcc\\mingw32\\8.2.0\\include\\c++",
                "C:\\MinGW\\lib\\opencv\\build\\include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "C:\\MinGW\\posix\\mingw64\\bin\\gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64",
            "browse": {
                "path": [
                    "${workspaceFolder}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 4
}

尝试了几次重新安装 g++ 和所有 minGW 的东西,没有任何效果。

这是我的main.cpp代码:

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp> 
#include <string> 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    const string file_name = "sunflower.jpg"; 
    Mat img = imread(file_name); 
    if( !img.data ) 
    { 
        cout << "Nie odnalezionu pliku " << file_name; 
        return -1; 
    } 
    const string window_name = "OpenCV_1"; 
    namedWindow(window_name, WINDOW_AUTOSIZE); 
    imshow(window_name, img); 
    waitKey(0); 
    return 0; 
}

控制台输出

 Executing task: g++ -g -o bin/debug.exe src/main.cpp -IC:\MinGW\lib\opencv\build\include -LC:\MinGW\lib\opencv\build\x64\vc15\bin -llibopencv_highgui242 -llibopencv_features2d242 -llibopencv_flann242 -llibopencv_objdetect242 -llibopencv_video242 -llibopencv_calib3d242 -llibopencv_contrib242 -llibopencv_imgproc242 -llibopencv_core242 -llibopencv_ml242 -llibopencv_legacy242 -llibopencv_nonfree242 -llibopencv_photo242 -llibopencv_stitching242 -llibopencv_videostab242 <

In file included from C:\MinGW\lib\opencv\build\include/opencv2/core.hpp:3290,
                 from C:\MinGW\lib\opencv\build\include/opencv2/highgui.hpp:46,
                 from C:\MinGW\lib\opencv\build\include/opencv2/highgui/highgui.hpp:48,
                 from src/main.cpp:1:
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:697:14: error: 'recursive_mutex' in namespace 'std' does not name a type
 typedef std::recursive_mutex Mutex;
              ^~~~~~~~~~~~~~~
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:697:9: note: 'std::recursive_mutex' is defined in header '<mutex>'; did you forget to '#include <mutex>'?
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:60:1:
+#include <mutex>

C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:697:9:
 typedef std::recursive_mutex Mutex;
         ^~~
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:698:29: error: 'Mutex' is not a member of 'cv'
 typedef std::lock_guard<cv::Mutex> AutoLock;
                             ^~~~~
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:698:29: note: suggested alternative: 'Matx'
 typedef std::lock_guard<cv::Mutex> AutoLock;
                             ^~~~~
                             Matx
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:698:29: error: 'Mutex' is not a member of 'cv'
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:698:29: note: suggested alternative: 'Matx'
 typedef std::lock_guard<cv::Mutex> AutoLock;
                             ^~~~~
                             Matx
C:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:698:34: error: template argument 1 is invalid
 typedef std::lock_guard<cv::Mutex> AutoLock;
                                  ^
The terminal process terminated with exit code: 1

我需要一个解决方案来配置 g++ 以编译应用程序。或者做一些我还不知道的事情。

【问题讨论】:

  • 尝试将-std=c++11 添加到g++ 命令中。
  • 你找到解决办法了吗?

标签: c++ windows opencv g++ mingw


【解决方案1】:

当你在 windows 上从源代码编译 openCV 时

参见 github 问题 Compilation Error while running OpenCV 3.3.1 src code with MinGW and Cmake. #10272使用带有“posix”-configuration 的编译器。就我而言,mingw-w64 做得很好。

记得调整cMake中的gcc g++路径,让它们不指向一些旧的mingw32安装(文章:opencv+cmake+qt+win10 compile opencv library

包含 opencv 标头的令人讨厌的修复

添加编译器标志-D_M_CEE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多