为啥在 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 Studio这么垃圾?

第一次安装过visual studio2005删了,再第二次安装就安装不起来了!为啥?

visual studio 2008的ISO文件有3.70GB,为啥有这么大?

关于在Visual Studio2010中如何卸载Visual Asixist这个插件?为啥将它卸载后Visual Studio启动后仍然有

为啥 JavaScript Intellisense 在 Visual Studio 2012 中并不总是有效?

visual studio code终端输出为啥会乱码