4

我正在学习如何使用 OpenCV,作为练习,我运行了一个程序(在发布模式下,x64)。我有 0 个编译器错误,但弹出屏幕显示:

“程序无法启动,因为缺少 opencv_core243.dll”

但是,我确保我声明了正确的环境变量并指定了必要的库/目录。当我将以下 .dll 文件复制到 x64/Release 中时,我的问题得到了解决:

  • opencv_core243.dll
  • opencv_highgui243.dll
  • opencv_imgproc243.dll

我的程序现在编译得很好并且可以工作。但是,我想知道为什么。复制和粘贴这些 .dll 文件感觉很便宜。我是否错过了自动生成这些 .dll 文件的步骤?

4

1 回答 1

4

这个问题的实际解决方案是将opencv bin目录的路径附加到系统PATH环境变量中。

查看此答案,描述在 Visual Studio 2010 中安装 OpenCV 的完整过程。

这种方法有一个缺点。预构建的 OpenCV x86 和 x64 二进制文件具有相同的名称。因此,通过将 OpenCV 的路径附加到PATH变量中,您可以一次执行 32 位版本或 64 位版本。要运行其他版本,您必须更改PATH变量。

对此的替代方案(我个人最喜欢的)还涉及将 dll 复制到输出目录,但这是在编译结束时自动完成的。我所做的是为 x86 和 x64 dll 路径创建新的环境变量。我创建用户变量CV_BIN32CV_BIN64分别包含 x86 和 x64 dll 的路径。

创建用户变量后,打开您的 OpenCV 项目,转到Project Properties-> Build Events-> Post-Build Event-> Command Line

在运行时为您需要的 dll 添加复制命令。

这个是针对 Win32 Release 配置的:

copy "$(CV_BIN32)\opencv_core243.dll" "$(OutDir)"
copy "$(CV_BIN32)\opencv_highgui243.dll" "$(OutDir)"

您可以为所有 4 种配置更改它们,(调试/发布),(Win32/x64)

现在当项目构建过程完成时,指定的dll会自动复制到输出目录,并且不会显示错误。

于 2013-01-21T10:43:36.437 回答