我正在学习如何使用OpenCV,作为实践,我运行了一个程序(在发布模式下,x64)。我没有编译错误,但有一个弹出屏幕说:
"程序无法启动,因为opencv_core243.dll缺失"
但是,我确保声明了正确的环境变量并指定了必要的库/目录。当我将以下.dll文件复制到x64/Release时,我的问题得到了解决:
- opencv_core243.dll
- opencv_highgui243.dll
- opencv_imgproc243.dll
我的程序现在很好地编译和工作。但是,我想知道为什么。复制和粘贴这些.dll文件感觉很便宜。我错过了一个步骤,这些。dll文件将自动生成?
实际的解决方法是将opencv bin目录的路径附加到System PATH
环境变量
看一下这个答案,它描述了在Visual Studio 2010中安装OpenCV的完整过程。
这种方法有一个缺点。预构建的OpenCV x86和x64二进制文件具有相同的名称。因此,通过将OpenCV的路径附加到PATH
变量,您可以一次执行32位版本或64位版本。要运行另一个版本,您必须更改PATH
变量。
另一种方法(我个人最喜欢的)也包括将dll复制到输出目录,但这是在编译结束时自动完成的。我所做的是为x86和x64 dll路径创建新的环境变量。我创建了用户变量CV_BIN32
和CV_BIN64
,分别包含x86和x64 dll的路径。
创建用户变量后,打开您的OpenCV项目,进入Project Properties
-> Build Events
-> Post-Build Event
-> Command Line
。
为运行时所需的dll添加复制命令。
这个是Win32发布配置:
copy "$(CV_BIN32)opencv_core243.dll" "$(OutDir)"
copy "$(CV_BIN32)opencv_highgui243.dll" "$(OutDir)"
您可以更改所有4种配置,(调试/发布),(Win32/x64)
现在,当项目构建过程完成时,指定的dll将自动复制到输出目录,并且不会显示错误。