OpenCV - DLL缺失,但实际上并没有缺失?

33

我正在尝试使用以下代码进行OpenCV的基本程序:

#include "cv.h"
#include "highgui.h"

int main()
{
    IplImage* newImg;
    newImg = cvLoadImage("~/apple.bmp", 1);
    cvNamedWindow("Window", 1);
    cvShowImage("Window", newImg);
    cvWaitKey(0);
    cvDestroyWindow("Window");
    cvReleaseImage(&newImg);
    return 0;
}
当我运行这个程序时,出现以下错误提示:
“无法启动程序,因为计算机中缺少libcxcore200.dll文件。请尝试重新安装程序以解决此问题。”
但是,我已经看到了这个DLL文件,并且它确实存在。我已将以下内容添加到链接器的输入依赖项中:
C:\OpenCV2.0\lib\libcv200.dll.a C:\OpenCV2.0\lib\libcvaux200.dll.a C:\OpenCV2.0\lib\libcxcore200.dll.a C:\OpenCV2.0\lib\libhighgui200.dll.a
为什么会这样呢?我正在使用Visual Studio 2008。
当我将.dll.a文件链接成.dll文件时,出现以下错误提示:
“致命错误LNK1107: 无效或损坏的文件:无法在0x3F8处读取libcv200.dll”

1
你还没有解决这个问题吗? - Romain Hippeau
14个回答

26

我按照http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2010的指示操作,但仍然遇到了同样的问题。下面是我如何解决它的方法:

  1. 下载MSVC 2010 Express版。

  2. 下载Win 32 OpenCV 2.2二进制文件并按默认位置安装。

  3. 创建新项目。

  4. 项目设置:

    项目-> OpenCV_Helloworld属性...配置属性-> VC++目录

    包含目录...添加:C:\OpenCV2.2\include\;

    库目录...添加:C:\OpenCV2.2\lib;C:\OpenCV2.2\bin;

    源目录...添加:

  5. C:\OpenCV2.2\modules\calib3d\src;C:\OpenCV2.2\modules\contrib\src;C:\OpenCV2.2\modules\core\src;C:\OpenCV2.2\modules\features2d\src;C:\OpenCV2.2\modules\flann\src;C:\OpenCV2.2\modules\gpu\src;C:\OpenCV2.2\modules\gpu\src;C:\OpenCV2.2\modules\highgui\src;C:\OpenCV2.2\modules\imgproc\src;C:\OpenCV2.2\modules\legacy\src;C:\OpenCV2.2\modules\ml\src;C:\OpenCV2.2\modules\objdetect\src;C:\OpenCV2.2\modules\video\src;
    

    连接器 -> 输入 -> 附加依赖项...

    对于调试构建...添加:

    opencv_calib3d220d.lib;opencv_contrib220d.lib;opencv_core220d.lib;opencv_features2d220d.lib;opencv_ffmpeg220d.lib;opencv_flann220d.lib;opencv_gpu220d.lib;opencv_highgui220d.lib;opencv_imgproc220d.lib;opencv_legacy220d.lib;opencv_ml220d.lib;opencv_objdetect220d.lib;opencv_video220d.lib;
    

    到这一步,我以为我已经完成了,但在debug模式下运行exe时也遇到了你描述的问题。最后一步很明显,选择:

    链接器 -> 通用 ... 将“使用库依赖项输入”设置为“Yes”

    希望能帮到你。


7
做完这个操作后,问题仍然存在。然后我重新启动了 MS Visual Studio 2010,然后它就可以工作了。 - Autonomous
2
@ParagS.Chandakkar,你的评论应该是答案的一部分! - nabroyan
我正在使用Visual Studio RC 2017。在你们遇到问题5年后,我也遇到了同样的问题,重启解决了我的问题,这是答案的一部分。 - user2918461

19
C:\ OpenCV2.0 \ bin 添加到您的 PATH 环境变量中。
或者
当您安装OpenCV时,请选择选项 Add OpenCV to the system PATH for current user ,该选项不是默认选项。

它已经在我的路径中了。我在安装时注意到了这个选项,并选择了它。 - charles-22
@charles,奇怪的是,我无法重现您的错误,在这里运行您示例代码正常。只是我使用mingw32-gcc而不是visual studio 2008 c++编译器。 - YOU
有趣。我真的不觉得它应该给我这个错误,因为这似乎不是一个常见的问题。令人困惑。 - charles-22
@charles,我刚刚尝试了OpenCV 2.0和2.1,两者都可以工作,所以也不是OpenCV版本的问题。 - YOU
我想补充一点,在将OpenCV二进制文件夹添加到系统路径后,可能不会立即更新。永久解决方案是重新启动计算机,但如果您宁愿在完全重新启动之前完成某些操作,可以以管理员身份打开Visual Studio,它将识别对PATH的新更改。 - Fuujin
显示剩余2条评论

15

仅供参考,在我给win7添加"PATH"环境变量之后,我需要重新启动计算机才能让它生效。


4
最终,重新启动帮助了我。 - Naomak
通常只需要注销并重新登录而无需重启即可。 - user3085931
Visual Studio 2015 OpenCV 3.10缺失DLL问题在重启后解决 :) - Rahal Kanishka
值得一提的是,如果您不想在检查一切是否正常之前重新启动计算机,以管理员身份打开正在使用的程序通常也可以起到作用。但请记住,在重新启动之前始终需要以管理员身份打开,因此要牢记这一点。 - Fuujin

8
在Visual Studio 2013中,您需要将此添加到“环境变量”,然后“重新启动”计算机。这是.dll文件所在的路径。 enter image description here

7
我之前在使用opencv时遇到了很多问题,经过漫长的4-6个月才成功解决。这是我遇到的最后一个问题,但是之前所有的解决方法都没有奏效。对我而言有效的方法是将opencv_core2*.dll(还有它所需的opencv_highgui2*.dll文件)复制并粘贴到你的项目中应用文件所在的 release (或debug) 文件夹中。
希望这可以帮到你!

你能想出为什么更新环境路径变量没有帮助吗? - Snehasish
我猜这是因为你没有在更新路径后重新启动应用程序,或者路径变量中没有包含带有dll文件的文件夹。你必须确保你指向的bin文件夹包含dll文件,并且它必须是链接器链接的正确版本的dll文件。 - Domi

4

您只需要将所需的dll文件(或文件夹)的路径添加到系统的“环境变量”中的“路径”中,问题就会100%得到解决。我也曾遇到过这个问题。


2

只需打开 bin 文件夹,将 .dll 文件复制并粘贴到您正在工作的文件夹中即可解决问题。


1
关于@Marc的回答,我不认为VC使用来自操作系统的路径。您是否将路径添加到了VC的库路径中?我通常会将DLL添加到项目中,并在构建时复制最新版本,这对我非常有效。

0

你可以在opencv\build\x86\vc12\bin文件夹中找到opencv_core248和其他dll文件。只需将所需的dll文件复制到system32文件夹中,你的应用程序就可以立即开始工作了!希望能对你有所帮助。


4
凤凰,那是一个可怕的想法。请停止回答类似的问题。 - berak

0
这可能像是在复活一匹死马。但仅仅是为了说明,之所以将dll文件简单地放到system32文件夹中的原因是该文件夹位于操作系统的系统路径中。
实际上,最佳实践是提供操作系统路径链接。
针对Windows 10系统而言,
  1. 打开文件资源管理器
  2. 右键单击“此电脑”,选择“属性”
  3. 现在,在弹出的“控制面板\系统和安全\系统”窗口中,从左侧面板中单击“高级系统设置”。
  4. 在下一个窗口的底部,单击“环境变量”按钮。
  5. 在下一个窗口中,有两个面板,顶部面板用于修改当前用户的变量,底部面板用于修改系统变量。在底部面板上,找到变量“Path”,单击它以选择它,然后单击“编辑”按钮。
  6. 在这里,您可以创建、编辑、删除或更新系统的不同路径。例如,要将mingw32-make添加到系统中,以便您可以通过命令提示符访问该命令,请单击“新建”,然后粘贴bin的路径。示例路径:“D:\Qt\Tools\mingw730_64\bin”,无引号或额外空格。
  7. 单击所有窗口上的“确定”以保存更改,然后重新启动计算机以加载更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接