为什么使用clang的两阶段命令行构建不能生成dSYM目录?
Why does a 2-stage command-line build with clang not generate a dSYM directory?
我有一个简单的项目,我想调试想产生dSYM文件夹与调试符号。
运行: clang++ -std=c++14 -stdlib=libc++ -g -o Lazy Lazy.cpp
创建懒惰。dSYM如我所料
然而:clang++ -std=c++14 -stdlib=libc++ -g -c Lazy.cpp
clang++ -stdlib=libc++ -g -o Lazy Lazy.o
不会创建Lazy。dSYM(似乎符号嵌入在二进制中).
遗憾的是,两步构建是我修改的makefile所做的。我如何生成懒惰。dSYM从2阶段编译和链接构建?
我不需要一个dSYM目录,只是调试符号,但想了解何时以及为什么它被创建。
. dsym包的创建是由一个名为dsymutil
的工具完成的。当Apple增加对DWARF调试信息的支持时,他们决定将"可执行链接"与"调试信息链接"分开。因此,调试信息的链接不是由普通的链接器完成的,而是由dsymutil
完成的。
为方便起见,当您在一个步骤中构建一个程序时,编译器会代表您调用dsymutil
。这是因为它知道它有所有的输入。如果将-v
(也称为--verbose
)选项添加到编译命令中,您将看到dsymutil
的调用是它执行的最后一步。
dsymutil <your_program>
这是一篇苹果工程师的文章,他帮助设计和实现了苹果对DWARF的支持,解释了他们的想法。他还在Stack Overflow上回答了一个关于这方面的问题。
相关文章:
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 不能将C++的"std::filesystem"库与介子构建一起使用
- 为什么我不能构建opencv WITH_QT?
- 不能从lambda构建
- 可以使用Meson构建一个琐碎的项目,但不能使用CMake
- opencv2 可以使用 cmake 构建,但不能使用 CLion "build" 功能?
- 我不能在函数中使用新功能C++构建
- 为什么这个程序不能运行,但它会构建
- 在Windows中使用g++构建C++文件,但不能作为.bat使用
- Android NDK构建共享库-中止-停止.local_module_filename不能包含文件扩展名
- 为什么这段代码不能用 clang 构建,用 gcc 崩溃,但在 VC++ 上运行良好?
- 为什么visual studio在构建时不能打开我的文件进行编写
- 为什么这个简单的makefile不能在更改时重新构建源代码
- 为什么我不能在构建ifstream时传递它呢
- 为什么使用clang的两阶段命令行构建不能生成dSYM目录?
- 如果更改了,GNU make不能正确地构建头文件
- range -for语句不能使用数组函数参数构建范围表达式
- Qt Creator不能构建任何东西
- VS2010构建了一个exe,但不能调试它,抱怨它找不到它
- Eclipse c++ OpenGL -不能构建项目