我正在尝试链接使用 /MDd 标志构建的库(libcef_wrapper_dll.lib)。我的应用程序是使用 /MDd 和 /CLR 构建的,因此应该兼容。该项目编译良好,但在链接时我收到以下非常无用的错误:
Error 1 fatal error LNK1318: Unexpected PDB error; OK (0) '' c:\Projects\Cef\CefSharp\libcef_dll_wrapper.lib 1 CefSharp
我没有 .LIB 的 .PDB 文件,我需要一个吗?
结果我需要删除所有项目临时文件。缓存等,终止调试符号服务器并重新启动 Windows。
我在将 VS2019 v16.10.x 升级到 v16.11.x 时遇到了同样的问题。
这为我解决了这个问题:
打开您的 *.vcxproj 文件。 寻找这一行:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
在其下方添加以下 3 行:
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
现在使用64位工具链,应该不再有任何问题了。
我见过 LNK1318:意外的 PDB 错误;链接时未知 (24)。
当我有两个以上的大输出链接同时发生时,就会发生这种情况 - mspdbsrc.exe 使用越来越多的内存,达到 2gig 左右,然后崩溃。
这个对我有用: 项目属性 -> C/C++ -> 代码生成 -> 启用函数级链接 -> 是
如果将
/MP
或 /MDd
与 MSBuild 结合使用,还可以使用 /Zf
编译器选项。 (请参阅https://learn.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk1318)
LNK1318 的其他故障排除步骤:
Debug Information Format
更改为 /C7
或 None
/property:_IsNativeEnvironment=true
对我来说最好的解决方案一直是简单地终止 Visual Studio 的调试符号服务器:
for /F "tokens=2 delims= " %I in ('tasklist|findstr /I "mspdbsrv.exe"') do taskkill /F /PID %I>NUL && echo VS Debug Symbol Server killed.
此命令也可以从批处理文件运行,如下所示:
@for /F "tokens=2 delims= " %%I in ('tasklist^|findstr /I "mspdbsrv.exe"') do taskkill /F /PID %%I>NUL && echo Debug Symbol Server killed.
这是 VC 链接器的技术限制。 您应该尝试更多地拆分代码模块。拆分库也有助于延长链接时间。
看看是否可以在发布模式下成功构建
重建项目解决了问题
我也收到了如下构建错误: 链接:致命错误 LNK1318:意外的 PDB 错误;
有几个URL谈到了这个问题,但似乎没有完整的解决方案。 有人说 mspdbsrv.exe 是麻烦制造者。 在我清理增量构建结果并进行真正的干净构建后,它运行良好。
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/9e58b7d1-a47d-4a76-943a-4f35090616e8
我遇到了问题,因为我有一个带有 /clr 选项的文件,它把事情弄乱了。我将 CLR 特定代码移至单独的文件中,进行清理、重建,问题就消失了。
这可能不是答案。我在 VS 2019 上遇到了这个问题。有一段时间我经常不得不“取消构建”。在重复的“取消构建”中,我从以下“构建”开始看到这个问题。
从技术上讲,取消构建不会清理一些东西(正如您可以看到一些杀死“mspdbsrv.exe”的建议,这些建议可能无法通过“干净构建”正常退出。
最后,我建议保留构建运行而不是“干净构建”以避免此问题。我认为等待构建完成至少比重新启动计算机要好。
似乎与并行链接多个可执行文件有关。根据我收集的信息,MSVC 链接器(有时还有编译器)使用单独的进程来生成 PDB,并且如果并行启动,链接器的多个实例将共享相同的进程。显然,他们这样做时可能会感到困惑。
对我们来说,切换到
lld-link
似乎有效。 (Clang 的链接器,Microsoft 的 link.exe
的直接替代品。)
这对我有用:转到项目属性 -> C/C++ -> 代码生成 -> 运行时库 -> 多线程调试 (/MTd)。
这看起来是一些令人难以置信的问题。 参考:https://incredibuild.force.com/s/article/fatal-error-LNK1318-unexpected-PDB-error-OK-0
致命错误LNK1318:意外的PDB错误;好的 (0) 内容
--> 此错误可能会以随机方式发生 - 通常在构建大型解决方案时。
有 2 种方法可以解决 LNK1318 错误:
1. Switching to the old PDB method - C7 (/Z7) since this error seems to invoke when the regular "PDB for Edit And Continue" option is enabled.
2. Switching to 64-bit native compiler. You can enable the 64bit native compiler using Agent Settings -> Visual Studio Builds -> Advanced. Under the "PDB File Allocation" please mark the "Force 64-bit toolset".