【发布时间】:2016-03-09 06:10:51
【问题描述】:
我对 Windows 上运行时库选项之间的概念感到困惑。我以为我知道lib和dll之间的区别。 lib 将被编译为您的代码,dll 将在执行时动态加载。但是当我编译一个库时,我不得不在/MD 和/MT 之间做出选择。在 msdn.microsoft.com 上据说:
使用 /MD 编译的应用程序静态链接到 MSVCRT.lib。 该库提供了一层代码,使链接器能够 解决外部引用。实际工作代码包含在 MSVCRversionnumber.DLL,它必须在运行时可用 与 MSVCRT.lib 链接的应用程序。
此时我无法理解当我使用 lib 时还需要动态加载 dll。似乎使用/MD 选项构建lib 将导致“动态库”,或者使用/MT 选项构建dll 将导致“静态dll”。
那么“/MD vs /MT”和“lib vs dll”有什么区别?
【问题讨论】:
-
/MT 仅适用于创建不使用任何模块的程序时。它唯一的优点是程序很容易部署到另一台机器上,只需复制一个 EXE 文件。当您在使用 DLL 的设备中使用它时,您已经失去了这一优势。并且必须处理进程具有多个 C 运行时副本的事实。这是一个非常非常冒险的提议,CRT 有很多全局状态。像
errno这样基本的东西不能正常工作。千万不要那样做,就这么简单。
标签: c++ visual-studio dll