【问题标题】:Can a DLL link to another DLL with an import library if the first DLL is linked at runtime?如果第一个 DLL 在运行时链接,一个 DLL 是否可以通过导入库链接到另一个 DLL?
【发布时间】:2009-10-04 09:01:19
【问题描述】:

我正在使用其 SDK 为音频播放器 (foobar2000) 编写 DLL。我的 DLL 链接到另一个 DLL,我使用导入库 (.lib) 完成了此操作。但是,在运行时,音频播放器抱怨我的 DLL(链接到另一个的那个)缺少依赖项。

我不知道这是否可以概括,但是如果第一个DLL在运行时链接没有导入库,那么它不能链接到另一个带有导入库的DLL吗?如果确实如此,为什么会这样?

【问题讨论】:

    标签: dll linker


    【解决方案1】:

    您可以在运行时将 DLL 链接到任何其他 DLL。链接 DLL 的规则是相同的。您可以发布缺少的依赖项的名称吗?依赖是正确的目录吗?

    【讨论】:

      【解决方案2】:

      您的 dll 应该可以正常工作,我认为您必须使用 dependency walker 检查它以查看您缺少什么

      【讨论】:

      • 感谢您推荐依赖walker。原来我的另一个 DLL 是用 /MD 编译的,这导致它寻找 msvcr90.dll,无论出于何种原因都找不到。使用 /MT(静态链接)重新编译另一个 DLL 解决了它。
      【解决方案3】:

      当操作系统加载 DLL(当然也包括 EXE)时,它会查找其导入表并尝试加载导入的库。

      如果没有找到,您会看到您描述的错误。

      您可以使用 LoadLibrary 和 GetProcAddress 动态加载依赖库来防止它发生,但您需要处理缺少依赖项的错误。

      【讨论】:

      • 其实我会在 DLL 上使用 Dependency Walker 来尝试找出操作系统无法满足的导入
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      相关资源
      最近更新 更多