发布版本依赖于 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)?