clang 似乎忽略静态库中目标文件的调试信息

问题描述 投票:0回答:1

当我直接从目标文件链接最终的二进制文件时,如

clang -o binary build/lib/*.o build/bin/*.o

我的二进制文件崩溃了,我到处都有行号,因为我所有的目标文件都是用

-g
构建的,所以我应该获得完整的调试信息。

但是当我将一些目标文件组合到静态库中时,使用

ar -q lib.a build/lib/*.o

然后将最终的二进制文件与

链接
clang -o binary lib.a build/bin/*.o

我遇到了崩溃,我只有目标文件的行号,但没有静态库中任何目标文件的行号。

我做错了什么?

linker clang static-linking debug-symbols
1个回答
0
投票

我做错了什么?

你没有说你在什么平台上,或者你正在使用哪个链接器。

对于 LLD 以外的 UNIX 链接器,此命令:

clang -o binary lib.a build/bin/*.o

将导致没有来自

lib.a
的对象实际被使用。

通常这会导致无法解析的符号,但是(取决于

lib.a
中定义的符号)符号可能来自
libc
系统库,在这种情况下,您实际上可能会得到“无行号”。

您想要的命令是:

clang -o binary build/bin/*.o lib.a

链接线上命令行参数的顺序很重要

© www.soinside.com 2019 - 2024. All rights reserved.