gpt4 book ai didi

c++ - 为什么使用 clang 的 2 阶段命令行构建不会生成 dSYM 目录?

转载 作者:IT老高 更新时间:2023-10-28 22:59:24 29 4
gpt4 key购买 nike

我有一个要调试的简单项目,想要生成带有调试符号的 dSYM 文件夹。

运行:

clang++ -std=c++14 -stdlib=libc++ -g -o Lazy Lazy.cpp

按照我的预期创建 Lazy.dSYM。

但是:

clang++ -std=c++14 -stdlib=libc++ -g -c Lazy.cpp
clang++ -stdlib=libc++ -g -o Lazy Lazy.o

不创建 Lazy.dSYM(似乎符号嵌入在二进制文件中)。

遗憾的是,两步构建是我修改后的 makefile 所做的。如何从 2 阶段编译和链接构建生成 Lazy.dSYM?

我不需要 dSYM 目录,只是调试符号,但想了解创建它的时间和原因。

最佳答案

.dSYM 包的创建是由一个名为 dsymutil 的工具完成的。当 Apple 添加对 DWARF 调试信息的支持时,他们决定将“可执行链接”与“调试信息链接”分开。因此,调试信息链接不是由普通链接器完成的,而是由 dsymutil 完成的。

为方便起见,当您一步构建程序时,编译器会代表您调用 dsymutil。那是因为它知道它拥有所有的输入。如果您将 -v(也称为 --verbose)选项添加到编译命令,您将看到 dsymutil 的调用作为最后一步确实如此。

但在其他情况下,它不会这样做。它将调试信息链接步骤留给用户手动完成。您可以通过简单地发出命令来做到这一点:

dsymutil <your_program>

这里是 an article由一位帮助设计和实现 Apple 对 DWARF 的支持的 Apple 工程师解释他们的想法。他还 answered Stack Overflow 上有一个关于这些东西的问题。

关于c++ - 为什么使用 clang 的 2 阶段命令行构建不会生成 dSYM 目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com