发布版本依赖于 MFC 的调试 dll

Posted

技术标签:

【中文标题】发布版本依赖于 MFC 的调试 dll【英文标题】:Release build depends on debug dll from MFC 【发布时间】:2016-04-06 12:00:21 【问题描述】:

我们的发布版本需要 MFC 库的调试版本。有谁知道从哪里开始查看项目,以便我们可以正确地将这些依赖项更改为发布依赖项? 使用的命令行:

for %f in (*.lib) do dumpbin /IMPORTS:msvcrt120d.dll /OUT:output.txt

编辑:

我得到的输出(与我指定的导入文件无关):

Dump of file DataMts.lib

File Type: LIBRARY

Summary

     1B0 .CRT$XCU
    15BA .bss
     238 .data
    5D67 .data$r
    1FC0 .debug$S
   1ABB2 .drectve
   1AE68 .pdata
   1CA3C .rdata
    BDF0 .rdata$r
     730 .rsrc$01
    25F8 .rsrc$02
     636 .text$di
  146BCA .text$mn
    F259 .text$x
     597 .text$yd
   3BC58 .xdata
     980 .xdata$x
      10 ATL$__a
      10 ATL$__z

【问题讨论】:

检查您的 MFC 设置。如果这些都很好,那么它可能是您链接的库之一的依赖项。检查您是否链接到(第三方)库的调试版本,该库链接到 MFC 的调试版本。 @IInspectable 嗨,您的朋友非常好。这可能是我们链接的库之一的依赖项。但是这些库的数量很大(超过 160 个),我相信我必须手动检查它们并进行检查,除非您能提出更好的解决方案? 您可以自动化该过程:在所有 DLL 上运行 FOR 循环并使用 /IMPORTS 选项执行 DUMPBIN,将调试 MFC DLL 之一作为可选 file 参数。 @IInspectable,您好,非常感谢您的帮助。你会这么好心并提供一个如何使用它的例子吗?哦,还有一点澄清,那些不是 MFC dll(正如我被告知的那样),而是 msvcrt120d.dll。我们的模块之一依赖于它,我需要找到我们的模块。谢谢。 FOR %f IN (*.exe *.dll) do dumpbin /IMPORTS:msvcrt120d.dll %f 之类的东西应该可以。最好将输出通过管道传输到文本文件中,以便您以后可以在文本编辑器中搜索它。搜索msvcrt120d.dll 将直接带您到您正在寻找的模块。 【参考方案1】:

刚刚完成这个以确保我们的最终构建没有调试依赖项 这是我的 bat 文件 -

@echo off
echo Testing...

for %%v in (*.exe *.dll) do (
dumpbin /imports %%v | find /i "0d.dll" > nul
if not errorlevel 1 echo %%v is Debug
)

【讨论】:

以上是关于发布版本依赖于 MFC 的调试 dll的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的发布版本仍在寻找调试 DLL (MSVCR110D.dll)?

如何自动选择调试库和发布库?

mfc140ud.dll 中的调试断言失败

没有找到MFC42D.DLL

对使用共享 MFC 核心 DLL 的 MFC 项目使用 CTrace::SetLevel

DLL 不应需要 mfc 依赖项