【问题标题】:How to correctly use the linker /SOURCELINK option with c++如何在 c++ 中正确使用链接器 /SOURCELINK 选项
【发布时间】:2018-09-20 10:53:43
【问题描述】:

我们在 c# 项目中使用 SourceLink,它运行良好。 当我们尝试在 C++ 项目中使用它时,链接器中的 /SOURCELINK 选项似乎被忽略了,因为生成的 PDB 中没有相关的元数据

我正在使用这个 MSBuild:

 msbuild /version
 Enterprise
 Microsoft (R) Build Engine version 15.8.168+ga8fba1ebd7 for .NET Framework
 Copyright (C) Microsoft Corporation. All rights reserved.

 15.8.168.64424

链接器选项记录在这里:/SOURCELINK

我们是这样使用的

/SOURCELINK:"C:\Projects\SourceLinkTest\sourcelink.json"

使用手工制作的 JSON 文件(因为我们的 Stash 仍在 v4.5.2 上)

{"documents":
{"C:\\Projects\SourceLinkTest\\*":
    "https://stash.mycompany.com/projects/EDMPTF/repos/sourcelink/browse/*?at=ae281edb41c2da2a9375a63d8be9dd3ca00660fd&raw"
}
}

MSBuild 链接步骤如下所示:

Link:                                                                                                                                                                                                                                 
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x86\link.exe /ERRORREPORT:QUEUE /OUT:"C:\Projects\SourceLinkTest\Debug\SourceLi  nkTest.exe" /INCREMENTAL /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='fa  lse'" /manifest:embed /DEBUG:FASTLINK /PDB:"C:\Projects\SourceLinkTest\Debug\SourceLinkTest.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Projects\SourceLinkTest\Debug\SourceLinkTest.lib" /MACHINE:X86 /SOURCELINK:"C:\Projects\SourceLinkTest\sourcelink.json" Debug\SourceLinkTest.res        
Debug\SourceLinkTest.obj                                                                                                                                                                                                            
Debug\stdafx.obj                                                                                                                                                                                                                    
SourceLinkTest.vcxproj -> 
C:\Projects\SourceLinkTest\Debug\SourceLinkTest.exe

我们使用 Jetbrains dotPeek 检查 PDB 内容,因为 SourceLink V3 工具只能分析便携式 PDB

【问题讨论】:

  • 在 vsxproj 文件中支持 C++ 的提交已于 9 天前合并。 github.com/dotnet/sourcelink/issues/161 & nuget 上的最新版本是 2 个月大。
  • @CameronTaggart 我认为这不是 sourcelink 包问题,而是链接 - 它采用 /sourcelink 参数,但不添加条目到 pdb
  • 当然,但它链接到这个部分,我认为这是他解决它的方法:github.com/dotnet/sourcelink/pull/165/…
  • 这些更改似乎是针对构建 json 的目标,我们提供的是手工制作的 json,所以我不确定这是如何应用的。我可能在这里遗漏了一些基本的东西

标签: .net msbuild sourcelink


【解决方案1】:

在与 Microsoft 开发人员交谈后发现这是一个错误。部分修复在 VS2017 15.9.7 中。完整修复在 VS2019 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多