首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LoadLibrary MSVCRT问题

LoadLibrary MSVCRT问题
EN

Stack Overflow用户
提问于 2012-08-08 04:57:36
回答 2查看 1.1K关注 0票数 1

有两个问题让我困惑:

  1. 我从微软网站上读到,我们不能在同一个项目中使用不同的C运行时。假设我有一个用/MT标志编译的dll,那么我就不能在/MD编译的项目中使用dll。我的问题是,如果我使用LoadLibrary()加载dll,是否也必须具有相同的C运行时?如果我不这么做会有什么危险?
  2. 我认为使用/MT标志,运行时将静态地链接到二进制文件中。但是对于我的一个dll项目,我用/MT创建了一个dll。但是,当我dumpbin.exe /dependents mydll时,它显示MSVCR100.dll是一个依赖项。我的问题是为什么dll仍然依赖于MSVCR100.dll?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-08 09:43:50

( 1)不,这不是要求。在任何程序中都会发生这种情况,例如Windows DLL使用自己的CRT。然而,在一个程序中混合CRT是非常危险的,并且可能导致很难诊断问题。Windows是为了避免这些问题而精心设计的,它们从不需要代码来释放在DLL中分配的内存,不使用异常,不使用标准的C++库类,不依赖于地区或任何其他类型的共享CRT状态。当你混在一起的时候会出错的事情。限制自己使用C或COM非常有助于避免这些陷阱。

2)当您链接使用/MD编译的代码时,就会发生这种情况。在.libs链接中很常见。

当项目中有DLL并使用完全相同的编译器和选项编译所有代码时,请始终使用/MD避免麻烦。你自己没有构建的静态库是非常麻烦的,避免它们。

票数 2
EN

Stack Overflow用户

发布于 2012-08-08 08:50:18

关于你的第二个问题,依赖性是间接的。DLL使用依赖于MSVCR100.dll的DLL。使用依赖步行器,您可以看到组件的依赖树,并查看哪个库直接和间接依赖。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11857897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档