c - 在 GNU ld 映射文件中包含静态符号?

标签 c map static linker ld

将模块局部符号定义为静态(假设为 C)是一种良好的编程习惯。不幸的是,这会干扰对生成的目标/二进制文件的分析。例如,GNU ld 映射文件 (-Map=...) 不包含静态符号,因此会遗漏重要信息(例如,模块中实际有多少个符号、定义的每个函数的大小等) .

有没有办法让 GNU ld 在映射文件中包含静态符号,而不修改原始源代码? (很明显,可以使 static 修饰符成为条件,但在分析一堆 3rd 方项目时,这是一件很麻烦的事情。)

最佳答案

虽然链接器映射文件和 nm 不包含没有外部链接的符号,但 objdump 包含(只要调试信息可用)。您需要 -t 选项。

参见 this related answer

关于c - 在 GNU ld 映射文件中包含静态符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679940/

相关文章:

c - C 运行时错误中的 Split 函数

计算机之间的 C 目标文件兼容性

java - Java 使用什么来确定键是否在 Map 中重复?

带静态变量和不带静态变量的 Java 同步

c - 为什么后缀增量在 void *ptr 上不起作用,但 ptr = ptr + 1 起作用?

c - 在 C 中删除文件表明找不到该文件

java - 为什么 Java 在 Map 中没有 putIfAbsent(key, supplier) 方法?

java - 如何在 Java vector 上使用 Ruby 风格的映射?

c# - 反向扩展类

django - 部署 Django,静态文件路径