參考資訊:
https://github.com/tpoechtrager/wclang/issues/37
https://stackoverflow.com/questions/14191566/c-mutex-in-namespace-std-does-not-name-a-type
問題如下:
In file included from opencv-4.3.0/modules/core/src/precomp.hpp:49:0, from opencv-4.3.0/modules/core/src/algorithm.cpp:43: opencv-4.3.0/modules/core/include/opencv2/core/utility.hpp:714:14: error: ‘recursive_mutex’ in namespace ‘std’ does not name a type typedef std::recursive_mutex Mutex; ^~~~~~~~~~~~~~~ opencv-4.3.0/modules/core/include/opencv2/core/utility.hpp:715:25: error: ‘Mutex’ is not a member of ‘cv’ typedef std::lock_guard<cv::Mutex> AutoLock; ^~ opencv-4.3.0/modules/core/include/opencv2/core/utility.hpp:715:25: error: ‘Mutex’ is not a member of ‘cv’ opencv-4.3.0/modules/core/include/opencv2/core/utility.hpp:715:34: error: template argument 1 is invalid typedef std::lock_guard<cv::Mutex> AutoLock; ^ In file included from opencv-4.3.0/modules/core/src/algorithm.cpp:43:0: opencv-4.3.0/modules/core/src/precomp.hpp:365:5: error: ‘Mutex’ in namespace ‘cv’ does not name a type cv::Mutex&& getInitializationMutex(); ^~~~~ modules/core/CMakeFiles/opencv_core.dir/build.make:109: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/src/algorithm.cpp.o' failed make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/algorithm.cpp.o] Error 1 CMakeFiles/Makefile2:1839: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:182: recipe for target 'all' failed make: *** [all] Error 2
解法如下(執行如下命令切換成支援Posix的編譯器):
$ sudo update-alternatives --config x86_64-w64-mingw32-gcc There are 2 choices for the alternative x86_64-w64-mingw32-gcc (providing /usr/bin/x86_64-w64-mingw32-gcc). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/x86_64-w64-mingw32-gcc-win32 60 auto mode * 1 /usr/bin/x86_64-w64-mingw32-gcc-posix 30 manual mode 2 /usr/bin/x86_64-w64-mingw32-gcc-win32 60 manual mode Press <enter> to keep the current choice[*], or type selection number: $ sudo update-alternatives --config x86_64-w64-mingw32-g++ There are 2 choices for the alternative x86_64-w64-mingw32-g++ (providing /usr/bin/x86_64-w64-mingw32-g++). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/x86_64-w64-mingw32-g++-win32 60 auto mode * 1 /usr/bin/x86_64-w64-mingw32-g++-posix 30 manual mode 2 /usr/bin/x86_64-w64-mingw32-g++-win32 60 manual mode Press <enter> to keep the current choice[*], or type selection number: