【问题标题】:LNK1318: Unexpected PDB error; OK (0)LNK1318:意外的 PDB 错误;好的 (0)
【发布时间】:2011-05-14 11:31:20
【问题描述】:

我正在尝试链接使用 /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


【解决方案1】:

原来我需要删除所有项目临时文件 inc。缓存等,杀死调试符号服务器并重新启动窗口。

【讨论】:

  • 我经常遇到这种情况.. 删除所有内容或重新启动机器看起来不是一个实用或好的解决方案.. 根本原因是什么,我们可以使用任何适当的永久修复方法!
  • @ShivendraAgarwal 我希望我知道 - 我使用的是 VS2008,所以这是很久以前的事了,你是否在使用新版本时遇到同样的事情?显然,重新启动是一个剧烈而乏味的动作,但它似乎是唯一有效的方法。
  • 我现在使用的是 Visual Studio 2019。是的,这仍然存在:o.. 每次发生这种情况时,我都必须删除整个工作区并重建所有内容,这确实很痛苦。
  • 删除临时文件、删除缓存、重建、重新启动 Windows - 所有这些都不能被视为解决方案。我在一个非常大的项目中工作。全部重建可能需要 15 分钟。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      这为我解决了问题:

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

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

      在其下方,添加以下 3 行:

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

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

      【讨论】:

        【解决方案5】:

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

        看看能否在发布模式下成功构建

        【讨论】:

          【解决方案6】:

          重建项目解决了问题

          【讨论】:

            【解决方案7】:

            如果在 MSBuild 中使用 /MP/MDd,还请使用 /Zf 编译器选项。 (见https://docs.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk1318

            LNK1318 的其他故障排除步骤:

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

            【讨论】:

            【解决方案8】:

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

            【讨论】:

            • 这也是我必须做的。使用 Process Explorer 杀死 mspdbsrv.exe,重新链接失败的项目。
            • 要在批处理文件之外使用,请使用for /F "tokens=2 delims= " %I in ('tasklist|findstr /I "mspdbsrv.exe"') do taskkill /F /PID %I&gt;NUL &amp;&amp; echo VS debug symbol server killed.
            【解决方案9】:

            我也得到如下构建错误: LINK : 致命错误 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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                • 然后呢?到了您指定的地方后,应该怎么做?
                • 由于这个错误是偶发的,他可能是改了一个设置,然后随机的问题就没有出现了。更改运行时库(更改为您不想在发布版本中使用的库)很可能无法解决此问题。
                【解决方案12】:

                这看起来是一些 incredibuild 问题。 参考:https://incredibuild.force.com/s/article/fatal-error-LNK1318-unexpected-PDB-error-OK-0

                致命错误 LNK1318:意外的 PDB 错误;好的 (0) 内容

                --> 此错误可能以随机方式发生 - 通常在构建大型解决方案时。

                有两种方法可以解决您的 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".
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-09-20
                  • 1970-01-01
                  • 2023-03-21
                  • 2020-06-10
                  • 2018-05-02
                  • 1970-01-01
                  • 2015-07-06
                  • 2017-10-21
                  相关资源
                  最近更新 更多