【问题标题】:clang++ 14 does not generate PDB fileclang++ 14 不生成 PDB 文件
【发布时间】:2022-12-10 06:40:48
【问题描述】:

我的目标

我想使用 clang++ 14.0.6 和 mingw ucrt(类似 GCC)生成我的应用程序的 PDB 文件,并且不是clang-cl / clang-cpp。

我的问题

未生成 PDB 文件。

我试过的

clang++ -march=native -O3 -g -gcodeview main.cpp -o filecomp.exe

我在 --help、clang github 问题和现有的 SO 问题中寻找信息,但到目前为止没有找到任何答案。
大多数人谈论旧版本的 Clang 哪些解决方案对我或 Clang-cl 或什至 visual studio 捆绑的 clang-cl 不起作用,这些与我的情况无关。

【问题讨论】:

  • 一个奇怪的组合。你想使用 mingw 生态系统构建,然后在 VS 调试器中调试?
  • 不,我想使用 RemedyBG。它需要 PDB 文件。

标签: windows clang llvm pdb pdb-files


【解决方案1】:

编译时使用-g -gcodeview,链接时使用-fuse-ld=lld -g -Wl,--pdb=。这将生成 ??.pdb??.exe

您还可以将自定义 PDB 文件路径传递给 -Wl,--pdb=??

我不确定 -g 在链接时是否做了任何事情,但 Clang 没有对此发出警告,所以我更愿意保留它。如果在链接时指定,它会警告 -gcodeview 未被使用。

【讨论】:

  • 谢谢你的反馈。如果我想一次性编译和链接怎么办?因为我只有一个源文件。您还可以提供带有多个目标文件的链接部分的完整语法吗?我试过 ld.lld -o app.exe obj1 obj2 ... 但它抱怨 ld.lld: error: main.obj: unknown file type 即使帮助说 USAGE: ld.lld.exe [options] file... 我以经典方式编译目标文件 clang++ -c main.cpp -o main.obj 最后一个问题:你在哪里找到 Wl 信息?我在谷歌上花了一个小时,但从未看到它。
  • clang++ main.obj -o main.exe -fuse-ld=lld -g -Wl,--pdb= 链接。 clang++ main.cpp -o main.exe -g -gcodeview -fuse-ld=lld -Wl,--pdb= 一次编译链接。仅供参考,在 mingw 生态系统中,习惯的目标文件扩展名是 .o,而不是 .obj“你从哪里找到的 Wl 信息”谷歌引导我here。我能说什么,我的 google-fu 比你的好。 :P
【解决方案2】:

将此添加到您的主 CMakeLists.txt

add_compile_options(-g -gcodeview)
add_link_options(-fuse-ld=lld -g -Wl,--pdb=)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2011-07-24
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多