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? [视窗]的主要内容,如果未能解决你的问题,请参考以下文章