为啥在 Visual Studio 的 OpenCV 项目中使用 /MT 时仍然需要 dll?
Posted
技术标签:
【中文标题】为啥在 Visual Studio 的 OpenCV 项目中使用 /MT 时仍然需要 dll?【英文标题】:Why I still need dll when using /MT in an OpenCV project in Visual Studio?为什么在 Visual Studio 的 OpenCV 项目中使用 /MT 时仍然需要 dll? 【发布时间】:2018-09-16 15:11:48 【问题描述】:您好,我正在尝试在 VS2015 的 OpenCV 项目中使用 /MT(多线程),当我删除“opencv_world400.dll”时,程序出现错误,表明缺少此 dll。但是我认为 /MT 意味着静态链接,因此不需要 dll,可能是什么问题或原因?
【问题讨论】:
你需要opencv_world400.lib
的静态库版本。我怀疑您仍在使用动态存根库。 /MT
仅控制 C 运行时支持库的链接。您将需要为 3rd 方库构建不同的版本。
使用 /MT 时的可执行文件大小约为 450KB,使用多线程 DLL (/MD) 时的可执行文件大小约为 150KB,因此存在一些差异
@sybob 那区别是C和C++运行时不是opencv
@sybob 大小差异来自您的项目获得静态链接的 C/C++ 运行时这一事实。没有连接到 OpenCV。
谢谢大家,这是我的误会,我会尝试构建opencv的静态库
【参考方案1】:
/MT
和 /MD
参数指定您的项目如何链接到 C++ 运行时库,而不是 OpenCV。此设置与外部库的唯一区别是,为了避免冲突,所有使用的静态库都应具有与您的项目相同的此参数值。
由于您使用的是 OpenCV 的动态构建,因此更改此设置不会影响 OpenCV。如果您要切换到 OpenCV 的静态构建,那么这个参数应该在 OpenCV 和您的项目中匹配。
【讨论】:
谢谢,这听起来很合理,我会尝试构建我的静态 opencv 库。 由于从 cmets 判断你担心大小,使用静态 OpenCV 会给你更小的大小,因为链接器实际上可以包含你使用的那些 OpenCV 函数,而不是用所有的他们。 谢谢,实际上我希望我的可执行文件在没有 opencv 或 Visual Studio 的 PC 上运行,所以我正在尝试静态方法。以上是关于为啥在 Visual Studio 的 OpenCV 项目中使用 /MT 时仍然需要 dll?的主要内容,如果未能解决你的问题,请参考以下文章
第一次安装过visual studio2005删了,再第二次安装就安装不起来了!为啥?
visual studio 2008的ISO文件有3.70GB,为啥有这么大?
关于在Visual Studio2010中如何卸载Visual Asixist这个插件?为啥将它卸载后Visual Studio启动后仍然有