我一直在尝试用CMake 3.22.0-rc1从源代码构建OpenCV-4.5.1。当执行"mingw32-make"时,出现如下问题:我猜是CMakeList出了问题,但我不确定。我发现没有这样的文件名为"thread.c.obj",所以我试着用gcc编译thread.c,但是发生了一些引用错误(如果需要,我会在评论区发布截图或复制/粘贴错误)
这是错误的描述:
D:Codeopencvsourcesbuild>mingw32-make
[ 0%] Built target opencv_highgui_plugins
[ 0%] Building C object 3rdparty/openjpeg/openjp2/CMakeFiles/libopenjp2.dir/thread.c.obj
process_begin: CreateProcess(C:Users12271AppDataLocalTempmake6172-1.bat, C:Users12271AppDataLocalTempmake6172-1.bat, ...) failed.
make (e=2): 系统找不到指定的文件。//which means there's no such file
mingw32-make[2]: *** [3rdpartyopenjpegopenjp2CMakeFileslibopenjp2.dirbuild.make:76: 3rdparty/openjpeg/openjp2/CMakeFiles/libopenjp2.dir/thread.c.obj] Error 2
mingw32-make[1]: *** [CMakeFilesMakefile2:1650: 3rdparty/openjpeg/openjp2/CMakeFiles/libopenjp2.dir/all] Error 2
mingw32-make: *** [Makefile:165: all] Error 2
这是我第一次在这个论坛提问,对提问格式不熟悉,如有不妥之处请告诉我。谢谢!
你得到的错误是来自mingw32-make
试图运行.bat
文件,这不能由CreateProcess
(内部用于执行程序)运行,因为它需要像CMD /C
这样的东西来运行。
你可以尝试使用CMake标志-GNinja
结合忍者作为构建工具。这也更快了。
另一个解决方案是在构建时提供所有第三方先决条件,因此CMake不必从3rdparty
文件夹中构建所有内容。
或者您可以从命令提示符切换到MSYS2 shell。由于它的行为非常像Linux/Unix提示符,因此可以立即构建更好的库(因为这完全避免了调用.bat
文件)。