在 CodeBlocks 中链接 OpenCV 库失败?

Posted

技术标签:

【中文标题】在 CodeBlocks 中链接 OpenCV 库失败?【英文标题】:Unsuccessfully linking OpenCV libs in CodeBlocks? 【发布时间】:2014-12-22 18:22:30 【问题描述】:

问题在于 OpenCV 尚未正确设置以运行简单的“Hello World”类型的程序。

正在运行:Windows 8,64 位

IDE:代码块 13.12

OpenCV:2.4.10

采取的措施


已下载 OpenCV 二进制文件是使用 CMake 构建的(遵循本教程的基本步骤: http://kevinhughes.ca/tutorials/opencv-install-on-windows-with-codeblocks-and-mingw/) 将环境变量的 PATH 设置为 C:\opencv\build\x64\mingw\bin;C:\MinGW\bin 将链接库设置为 C:\opencv\build\x64\mingw\lib 中包含的所有库* 注意 * 文件的类型是 .dll.a 而不是 .dll 将搜索目录编译器设置为C:\opencv\build\include 将搜索目录链接器设置为C:\opencv\build\x86\mingw\lib 从 OpenCV 教程复制代码以测试正确的配置

'

   #include <opencv2/core/core.hpp>
   #include <opencv2/highgui/highgui.hpp>

    using namespace cv;

    int main()
   
    Mat image;// new blank image
    image = cv::imread("test.png", 0);// read the file
    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// create a window for display.
    imshow( "Display window", image );// show our image inside it.
    waitKey(0);// wait for a keystroke in the window
    return 0; 
    '
建成并运行 出现以下系统错误

程序无法启动,因为缺少 libopencv_core2410.dll 你的电脑。尝试重新安装程序以解决此问题。

配置有什么问题?

【问题讨论】:

将DLL复制到你的exe所在的目录。 在 MinGW 目录中找到 «libopencv_core2410.dll» 文件的位置,然后将路径添加到 $PATH,或者在项目中添加链接路径。 @sashoalm,糟糕的主意。完全击败“共享库” @berak 好吧,这就是 Windows 上的一种方式。你真的认为任何人都会希望 DLL 恰好在客户端的机器上吗?每个程序都只是将 DLL 放在 exe 的目录中,去C:\Program Files 看看。这不是 UNIX。 【参考方案1】:

Code::Blocks 的配置没问题,因为你设法构建并运行了。

DLL 目录需要在 PATH 中,否则 DLL 需要与可执行文件在同一目录中。

你可以把它复制到那里,但我会把它添加到 PATH 变量中。

命令sysdm.cpl 运行系统小程序。在“高级”选项卡中,按下底部的“环境变量...”按钮。在用户环境默认值中添加或编辑 PATH。

重启代码::Blocks。

【讨论】:

DLL ("C:\opencv\build\x86\mingw\bin\libopencv_core2410.dll") 被添加到 PATH 变量中并且 Code::Blocks 重新启动。然而,同样的系统错误再次出现。 DLL 是否被错误地添加到 PATH? 不,不要添加 DLL 文件本身。添加它所在的目录。但看起来你已经拥有了。这很令人困惑。您收到的消息来自 Windows 加载程序。检查您是否确实拥有该文件,libopencv_core2410.dll 是的,该文件存在并且在 C:\opencv\build\x86\mingw\bin 中。我应该把它移到可执行文件的目录吗? @Zephyr:是的,我会尝试(复制,而不是移动)。但从长远来看,你需要找出这里到底发生了什么。使用 PATH 中的包含目录,应该已经找到它。请注意,如果不清楚,更改 PATH 默认值不会更改任何给定进程(例如命令解释器实例)中的 PATH 值。这就是我写“restart Code::Blocks”的原因,而且,如果你从命令解释器运行程序,请重新启动它。 谢谢,从 C:opencv\build\x86\mingw\bin 复制所有 DLL 消除了系统错误。但是,正在发生另一个错误(可能不相关):在 libopencv_core2410.dll 中找不到入口点【参考方案2】:

只需在路径变量中设置 DLL 文件,例如 C:\opencv\my_build\install\x64\mingw\lib\libopencv_core2411.dll.a 这里 my_build 是一个目录,我在其中制作您在帖子中编写的所有库。

【讨论】:

以上是关于在 CodeBlocks 中链接 OpenCV 库失败?的主要内容,如果未能解决你的问题,请参考以下文章

一键快速部署CodeBlocks的EGE图形库工具

如何配置codeblocks+opencv

在 windows(W32) 上安装 opencv 以与代码块一起使用

在 CodeBlocks 中设置 OpenGL

Inter IPP & Opencv + codeblocks 在centos 环境下的配置

OpenCV静态库编译与链接