Windows下源码编译OpenCV的CMake识别及运行报错问题求解
Windows下源码编译OpenCV后的CMake配置与运行报错解决方案
一、CMake无法识别OpenCV的问题解决
错误原因
你先后遇到的两个CMake报错都是参数使用错误导致:
- 初始找不到
OpenCVConfig.cmake是因为没有给CMake指定你本地编译的OpenCV的配置文件路径 - 后续指定路径后仍然报错,是因为
find_package指令中用于指定搜索路径的参数是复数PATHS,你误用了单数PATH,该参数会被CMake识别为匹配条件而非搜索路径,导致路径解析错误。
正确配置方式
两种方式二选一即可:
- 方式1:直接修改CMakeLists.txt,使用正确的
PATHS参数
find_package(OpenCV REQUIRED PATHS C:/Users/theuser/Path/To/MyOpenCVInstallation/build/install/x64/vc16/lib)
- 方式2:无需修改CMakeLists.txt,执行cmake指令时传入路径参数
cmake .. -DOpenCV_DIR=C:/Users/theuser/Path/To/MyOpenCVInstallation/build/install/x64/vc16/lib
注意:指定的路径下必须存在OpenCVConfig.cmake文件,你选择的编译安装后的x64/vc16/lib路径是符合要求的。
二、运行时报错0xc0000135的问题解决
错误原因
Windows下错误码0xc0000135的含义是程序运行时找不到依赖的动态链接库(DLL),你的场景下就是程序无法找到OpenCV的相关DLL文件。
解决方案
三种方法任选其一即可:
- 方法1:配置系统环境变量
将OpenCV安装目录下的bin路径C:/Users/theuser/Path/To/MyOpenCVInstallation/build/install/x64/vc16/bin添加到系统或用户的Path环境变量中,配置完成后重启VSCode让环境变量生效,再运行程序即可。 - 方法2:手动拷贝DLL到输出目录
将上述bin路径下所有用到的opencv_*.dll文件,拷贝到你生成的exe所在目录(一般是build/Debug或build/Release目录),程序运行时会自动检索同目录下的DLL。 - 方法3:CMake自动拷贝DLL
在CMakeLists.txt末尾添加如下逻辑,每次编译完成后会自动将OpenCV的DLL拷贝到exe输出目录,无需手动操作:
if(WIN32) file(GLOB OPENCV_DLLS "${OpenCV_DIR}/../bin/*.dll") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${OPENCV_DLLS} $<TARGET_FILE_DIR:${PROJECT_NAME}>) endif()
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

