【问题标题】:Not sure how to build OpenCV for MinGW不确定如何为 MinGW 构建 OpenCV
【发布时间】:2014-06-12 21:05:34
【问题描述】:

TL;DR;

我正在尝试为 MinGW 构建 OpenCV。 cmake 一直抱怨没有健全的 CXX 编译器,尽管我可以使用 g++.exe 编译示例代码。


加长版

我尝试为 MinGW 找到一个二进制文件,but this didn't work

我尝试为 MinGW 进行编译,但由于 sh.exe 不在 $PATH 中的一些错误而失败。我很困惑,因为重命名文件系统上的目标文件并没有解决问题。

E:\work\opencv\mybuild> cmake -G "MinGW Makefiles" ../sources
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeMin
GWFindMake.cmake:22 (message):
  sh.exe was found in your PATH, here:


  C:/Users/desuna/AppData/Local/GitHub/PortableGit_054f2e797ebafd44a30203088cd3d
58663c627ef/bin/sh.exe


  For MinGW make to work correctly sh.exe must NOT be in your path.

  Run cmake from a shell that does not have sh.exe in your PATH.

  If you want to use a UNIX shell, then use MSYS Makefiles.

Call Stack (most recent call first):
  CMakeLists.txt:56 (project)


CMake Error: CMake was unable to find a build program corresponding to "MinGW Ma
kefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a differe
nt build tool.
CMake Error: CMake was unable to find a build program corresponding to "MinGW Ma
kefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a differe
nt build tool.
CMake Error: Error required internal CMake variable not set, cmake may be not be
 built correctly.
Missing variable is:
CMAKE_CXX_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be
 built correctly.
Missing variable is:
CMAKE_CXX_COMPILER
CMake Error: Could not find cmake module file: E:/work/opencv/mybuild/CMakeFiles
/2.8.12.2/CMakeCXXCompiler.cmake
CMake Error: Error required internal CMake variable not set, cmake may be not be
 built correctly.
Missing variable is:
CMAKE_C_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be
 built correctly.
Missing variable is:
CMAKE_C_COMPILER
CMake Error: Could not find cmake module file: E:/work/opencv/mybuild/CMakeFiles
/2.8.12.2/CMakeCCompiler.cmake
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!

后来有人告诉我,MSYS makefile 没有这个要求。现在有一个关于 C++ 编译器的错误。但是,正确识别了 C++ 编译器。另外,我尝试编译一个虚拟的 test.cxx 程序,它可以工作。

E:\work\opencv\mybuild> cmake -G "MSYS Makefiles" ../sources
-- The CXX compiler identification is GNU 4.8.1
-- The C compiler identification is GNU 4.8.1
-- Check for working CXX compiler: C:/MinGW/bin/g++.exe
-- Check for working CXX compiler: C:/MinGW/bin/g++.exe -- broken
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeTes
tCXXCompiler.cmake:54 (message):
  The C++ compiler "C:/MinGW/bin/g++.exe" is not able to compile a simple
  test program.

  It fails with the following output:

   Change Dir: E:/work/opencv/mybuild/CMakeFiles/CMakeTmp

错误日志是:

Determining if the CXX compiler works failed with the following output:
Change Dir: E:/work/opencv/mybuild/CMakeFiles/CMakeTmp

Run Build Command:C:/PROGRA~2/GnuWin32/bin/make.exe "cmTryCompileExec1507552824/fast"
C:/PROGRA~2/GnuWin32/bin/make.exe -f CMakeFiles/cmTryCompileExec1507552824.dir/build.make CMakeFiles/cmTryCompileExec1507552824.dir/build

make.exe[1]: Entering directory `E:/work/opencv/mybuild/CMakeFiles/CMakeTmp'

"/C/Program Files (x86)/CMake 2.8/bin/cmake.exe" -E cmake_progress_report /E/work/opencv/mybuild/CMakeFiles/CMakeTmp/CMakeFiles 1

Building CXX object CMakeFiles/cmTryCompileExec1507552824.dir/testCXXCompiler.cxx.obj
/C/MinGW/bin/g++.exe     -o CMakeFiles/cmTryCompileExec1507552824.dir/testCXXCompiler.cxx.obj -c /E/work/opencv/mybuild/CMakeFiles/CMakeTmp/testCXXCompiler.cxx

process_begin: CreateProcess(NULL, /C/MinGW/bin/g++.exe -o CMakeFiles/cmTryCompileExec1507552824.dir/testCXXCompiler.cxx.obj -c /E/work/opencv/mybuild/CMakeFiles/CMakeTmp/testCXXCompiler.cxx, ...) failed.

make (e=2): The system cannot find the file specified.


make.exe[1]: *** [CMakeFiles/cmTryCompileExec1507552824.dir/testCXXCompiler.cxx.obj] Error 2

make.exe[1]: Leaving directory `E:/work/opencv/mybuild/CMakeFiles/CMakeTmp'

make.exe: *** [cmTryCompileExec1507552824/fast] Error 2

我的目标是在 Windows 7 下为 C++ 中的一个小型应用程序进行一步构建,该应用程序与 onecv_core、opencv_highgui 等链接。为此,看来我需要在 mingw 下使用 gcc 从源代码构建 OpenCV。请告知正确的方法是什么。


编辑:

我尝试了 barek 的答案,错误与 MSYS 目标相同 - 没有健全的 c++ 编译器。接下来我尝试了cmake-gui,指定了编译器。另外,我确保 MinGW/bin 在我的路径中。遵循错误消息:

CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_CXX_COMPILER_ENV_VAR
CMake Error: Could not find cmake module file: E:/work/opencv/mybuild/CMakeFiles/2.8.12.2/CMakeCXXCompiler.cmake
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER_ENV_VAR
CMake Error: Could not find cmake module file: E:/work/opencv/mybuild/CMakeFiles/2.8.12.2/CMakeCCompiler.cmake
Configuring incomplete, errors occurred!

我怀疑问题出在一些非常愚蠢的地方,比如 CMAKE 无法更改目录,因为 MinGW 安装不当。

Here可以找到讨论,但是我:

  • 检查 MinGW/bin 在我的路径中
  • 还在cmake-gui 中手动指定了 C 和 C++ 编译器路径
  • 使用 SourceForge 的安装程序安装 MinGW,并选中“Alter PATH”复选框。

【问题讨论】:

  • 避免使用 msys,因为它会弄乱路径,只需使用常规 cmd.exe 运行 cmake,并构建常规 MinGW Makefile。在 PATH 上也有 mingw bin,因为它想运行 mingw32-make 而不是 make then
  • @berak,感谢您的提示。您对如何应对For MinGW make to work correctly sh.exe must NOT be in your path. 有什么建议吗?我绑定重命名文件,然后使用cmd.exe,但没有任何变化。

标签: c++ opencv cmake


【解决方案1】:
  1. 清理!删除所有以前的构建尝试,CmakeFile.cache 等。

  2. 路径上有 MingW/bin

  3. 在 opencv 目录中创建一个文件夹,名为 build_mingw,cd 那里

  4. cmake -G "MinGW Makefiles" -D CMAKE_CXX_COMPILER=mingw32-g++.exe -D CMAKE_MAKE_PROGRAM=mingw32-make.exe .. #

  5. mingw32-make

  6. mingw32-make install

【讨论】:

  • 非常感谢。我错过了mingw32-make。我在cmake-gui 的帮助下发现了这一点,并选择了高级选项来列出所有 cmake 变量。
  • 顺便说一句,也许源外构建会更干净?例如../build/mingw/
  • 是的,没错。另一方面,大多数人只保留安装目录并丢弃整个构建文件夹(~2gb!)
  • 我达到 62%,然后出现此错误:“modules\videoio\CMakeFiles\opencv_videoio.dir\build.make:126: recipe for target 'modules/videoio/CMakeFiles/opencv_videoio.dir/ src/cap_dshow.cpp.obj' 失败”。我必须做什么?
【解决方案2】:

我尝试了这里提到的一切和CMAKE_MAKE_PROGRAM not found,但没有任何帮助。然后重启电脑就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多