OpenCV 2.4 staticlib 链接仍然依赖 DLL? [视窗]

Posted

技术标签:

【中文标题】OpenCV 2.4 staticlib 链接仍然依赖 DLL? [视窗]【英文标题】:OpenCV 2.4 staticlib link still relies on DLL? [windows] 【发布时间】:2015-03-02 09:00:34 【问题描述】:

我的系统是 Windows 64 位,我使用的是 VS 2013。我使用的是最新的 OpenCV 2.4 版本。

我正在尝试编译一个使用 OpenCV 2.4 的简单 C 程序。动态链接版本运行良好。但是我需要一个静态链接的,所以我想我可以将这个可执行文件复制到我的工作环境中。

当我尝试运行静态链接的可执行文件时,程序无法读取我的视频文件,但也不会引发任何类型的异常。但是如果我把 opencv dll 放到我的程序目录下,程序就可以工作了。

我已将附加库路径设置为包含opencv\build\x64\vc12\staticlib。我已将 Runtime Library 设置为 Multi-threaded,但我想我仍然错过了一些选项。我就是想不通。

【问题讨论】:

您必须将链接器输入目录设置为静态库 openCV 文件夹(并且您必须添加一些您可能没想到的额外库) @Micka,是的,我也这样做了 通过使用opencv bin文件夹中的DLL,我发现opencv_ffmpeg2410_64.dll是关键文件。但为什么呢? 您是否从链接器目录中删除了动态库目录?您是否将任何 lib 目录添加到您的 path- 或 libs- 环境变量中? 【参考方案1】:

Here 是我在 OpenCV 论坛上发布的问题。总结一下:

Build your own static library from scratch.

更新

重新发布post中的步骤:

构建静态 ffmpeg 构建静态 opencv 和到 ffmpeg 的静态链接 构建程序和指向 opencv 和 ffmpeg 库的静态链接

警告:如果您静态链接到 ffmpeg 库,您可能会遇到法律问题。

【讨论】:

你能多解释一下吗?我确实使用 DBUILD_SHARED_LIBS = False 构建了它,现在如果我要添加它们不会在 dll 上中继的库?或者我应该在 Visual Studio 中打开每个模块/项目并使用特殊设置构建它? @StavBodik,静态 OpenCV 库动态链接到 ffmpeg 库。如果您需要单个可执行文件,则需要按照我在 OpenCV 论坛帖子中执行的步骤操作。

以上是关于OpenCV 2.4 staticlib 链接仍然依赖 DLL? [视窗]的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV迁移指南

55.Qt-将界面程序封装成静态库

55.Qt-将界面程序封装成静态库

Matlab 仍然比 C++ 中的 opencv 慢吗

OpenCV从2到3的过渡

vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录