LNK1318:意外的 PDB 错误;好的 (0)

问题描述 投票:0回答:14

我正在尝试链接使用 /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 文件,我需要一个吗?

visual-studio linker c++-cli
14个回答
23
投票

结果我需要删除所有项目临时文件。缓存等,终止调试符号服务器并重新启动 Windows。


6
投票

我在将 VS2019 v16.10.x 升级到 v16.11.x 时遇到了同样的问题。

这为我解决了这个问题:

打开您的 *.vcxproj 文件。 寻找这一行:

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

在其下方添加以下 3 行:

<PropertyGroup>
  <PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>

现在使用64位工具链,应该不再有任何问题了。


4
投票

我见过 LNK1318:意外的 PDB 错误;链接时未知 (24)。

当我有两个以上的大输出链接同时发生时,就会发生这种情况 - mspdbsrc.exe 使用越来越多的内存,达到 2gig 左右,然后崩溃。


4
投票

这个对我有用: 项目属性 -> C/C++ -> 代码生成 -> 启用函数级链接 -> 是


3
投票

如果将

/MP
/MDd
与 MSBuild 结合使用,还可以使用
/Zf
编译器选项。 (请参阅https://learn.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk1318

LNK1318 的其他故障排除步骤:

  • 进行全面清理/重建
  • 重新启动 mspdbsrv.exe
  • 关闭项目目录中的防病毒检查。
  • Debug Information Format
    更改为
    /C7
    None
  • 尝试使用
    /property:_IsNativeEnvironment=true
  • 进行构建

3
投票

对我来说最好的解决方案一直是简单地终止 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.

2
投票

这是 VC 链接器的技术限制。 您应该尝试更多地拆分代码模块。拆分库也有助于延长链接时间。

看看是否可以在发布模式下成功构建


2
投票

重建项目解决了问题


1
投票

我也收到了如下构建错误: 链接:致命错误 LNK1318:意外的 PDB 错误;

有几个URL谈到了这个问题,但似乎没有完整的解决方案。 有人说 mspdbsrv.exe 是麻烦制造者。 在我清理增量构建结果并进行真正的干净构建后,它运行良好。

http://connect.microsoft.com/VisualStudio/feedback/details/296978/link-fatal-error-lnk1318-unexpected-pdb-error-unknown-24

http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/9e58b7d1-a47d-4a76-943a-4f35090616e8


0
投票

我遇到了问题,因为我有一个带有 /clr 选项的文件,它把事情弄乱了。我将 CLR 特定代码移至单独的文件中,进行清理、重建,问题就消失了。


0
投票

这可能不是答案。我在 VS 2019 上遇到了这个问题。有一段时间我经常不得不“取消构建”。在重复的“取消构建”中,我从以下“构建”开始看到这个问题。

从技术上讲,取消构建不会清理一些东西(正如您可以看到一些杀死“mspdbsrv.exe”的建议,这些建议可能无法通过“干净构建”正常退出。

最后,我建议保留构建运行而不是“干净构建”以避免此问题。我认为等待构建完成至少比重新启动计算机要好。


0
投票

似乎与并行链接多个可执行文件有关。根据我收集的信息,MSVC 链接器(有时还有编译器)使用单独的进程来生成 PDB,并且如果并行启动,链接器的多个实例将共享相同的进程。显然,他们这样做时可能会感到困惑。

对我们来说,切换到

lld-link
似乎有效。 (Clang 的链接器,Microsoft 的
link.exe
的直接替代品。)


-1
投票

这对我有用:转到项目属性 -> C/C++ -> 代码生成 -> 运行时库 -> 多线程调试 (/MTd)。


-1
投票

这看起来是一些令人难以置信的问题。 参考: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".
© www.soinside.com 2019 - 2024. All rights reserved.