如何使用MinGW编译OpenCV3

时间:2018-01-10 06:12:48

标签: cmake mingw opencv3.0

我正在尝试编译OpenCV3并将其放入Qt项目,因为Qt正式提供了MinGW版本,因此我没有使用MinGW-w64

我在CMake中启用了ENABLE_CXX11并禁用了ENABLE_PRECOMPILED_HEADERS

现在问题是MinGW不包含std::thread

我知道mingw-std-threads lib可以修复它。但我不想修改OpenCV源代码。有没有其他方法可以向MinGW添加c ++线程功能?或者pthread使用CMake告诉OpenCV?

顺便说一句。我不想使用Qt's MinGW,因为我认为使用官方MinGW来编译lib将在任何版本的Qt中使用。

更新

在OpenCV detection_based_tracker.cpp中,使用CV_CXX11std thread选择pthread Marco。但我没有看到任何地方define CV_CXX11

detection_based_tracker.cpp代码的一部分:

#ifdef CV_CXX11
#define USE_STD_THREADS
#endif

#ifdef USE_STD_THREADS
#include <thread>
#include <mutex>
#include <condition_variable>
#else //USE_STD_THREADS
#include <pthread.h>
#endif //USE_STD_THREADS

我的环境:

windows 7 64bit
cmake-3.10.1-win64-x64
opencv-3.4.0
gcc 6.3

我尝试了什么:

  1. 安装CMake和MinGW
  2. ENABLE_PRECOMPILED_HEADERS
  3. 中停用CMake-gui#define USE_STD_THREADS第48行中
  4. 评论detection_based_tracker.cpp
  5. 配置并生成Makefile
  6. 运行mingw32-make
  7. 它已成功编译,但我必须修改OpenCV源代码。

1 个答案:

答案 0 :(得分:0)

如果使用正确版本的MinGW,即MinGW-w64,大多数工具链构建都具有现代线程功能。

你可以,例如使用the installer或通过MSYS2安装。