【问题标题】:Settings of Visual Studio to remove dependency on a dll file during runtimeVisual Studio 的设置以在运行时删除对 dll 文件的依赖
【发布时间】:2014-10-13 07:30:41
【问题描述】:

到处都有人建议如何让 Visual Studio 知道 Visual Studio 在运行时何时找不到 DLL。但我想知道在哪里删除该选项,以便运行时的 Visual Studio 不会尝试查找 dll 文件?我昨天也有类似的问题,here.没有答案

【问题讨论】:

  • 呃,如果你停止从 DLL 调用函数,它将停止查找。这里真正的问题是什么?
  • 动态链接的 openssl 库有问题。它现在固定了。感谢回复。想知道投反对票的原因是什么!

标签: c++ visual-studio visual-studio-2012 dll


【解决方案1】:

有多种选择:

  1. 从您的项目中删除导入库文件。转到 Visual Studio 链接器设置并删除条目 (Properties -> Linker -> Input)。

  2. 如果库由 #pragma comment(lib:"xxxx") (http://support.microsoft.com/kb/153901) 指定,则从源文件中删除该行并重新构建应用程序。

  3. 1234563动态加载库并在运行时获取函数指针。

还有一个东西叫Delay Loaded DLL's。如果这是您所追求的,这里是信息的链接:http://msdn.microsoft.com/en-us/library/151kt790.aspx

【讨论】:

  • 我没有 libeay32.dll 文件作为 Properties -> Linker -> Input 中的条目。此外,我在代码中的任何地方都没有 pragma 指令中的库。我只有ws2_32.libwinmm.lib,这两个库在pragma 指令中。同样在Code Generation -> Runtime Library 选项中设置了/MTd。感谢您的回复。
  • 不,*.lib 文件将位于链接器设置中,而不是 DLL 名称中。您在某处指定该库是一个依赖项,因为应用程序不会随机获取 DLL。此外,您应该在您的应用程序上使用 Dependency Walker 来查看您的应用程序所依赖的内容。如果您在 Dependency Walker (dependencywalker.com) 中看到该名称,那么您确实在设置中指定了 lib 文件。
  • 是的 ssleay32.liblibeay32.lib 在链接器设置中。而且我还为他们指定了路径。但是为什么要搜索dll文件呢?
  • @Tahlil 因为这就是它的工作方式。您指定一个导入库,在运行时,将搜索与导入绑定的那些 DLL。同样,在您构建的应用程序上使用 Dependency Walker。您是否看到不想加载的 DLL 的名称显示为依赖项?有一种叫做“延迟加载 DLL”的东西,但不确定这是否是你想要的。
  • 是的,它显示在模块列下。还显示打开文件时出错。
猜你喜欢
  • 2021-06-10
  • 2012-02-21
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2020-10-02
  • 2010-11-05
相关资源
最近更新 更多