gpt4 book ai didi

linux - 找出函数符号在目标文件 (.o) 中的可见性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:56 24 4
gpt4 key购买 nike

我只关心默认/隐藏的可见性。
.o 文件不是用 IPO 编译的。

如何找出符号在 .o 文件中的可见性?

为什么我必须从.o文件中找到它:
在某些平台上,我遇到了一个似乎有问题的 gcov.a。
而且我必须弄清楚哪里错了。
1. 我不知道工具链是如何配置和构建的。
2. 作为libgcc魔法的一部分,从源代码中弄清楚它是极其困难的。

最佳答案

您可以通过检查来找出对象文件中符号的可见性使用 objdump -t 的文件符号表。如果符号是隐藏它将在其 objdump 记录的第 6 个字段中标记为 .hidden,然后通过它的名字。如果它的可见性是 default 则不会有这样的标签并且第 6 个字段将是名称(通常情况下)。例如:

foo.c(默认可见性)

#include <stdio.h>

void foo(void)
{
puts("foo");
}

编译和检查:

$ gcc -c -fPIC foo.c
$ objdump -t foo.o | grep foo
foo.o: file format elf64-x86-64
0000000000000000 l df *ABS* 0000000000000000 foo.c
0000000000000000 g F .text 0000000000000013 foo

foo.c(隐藏可见性)

#include <stdio.h>

__attribute__ ((visibility ("hidden"))) void foo(void)
{
puts("foo");
}

重新编译并重新检查:

$ gcc -c -fPIC foo.c
$ objdump -t foo.o | grep foo
foo.o: file format elf64-x86-64
0000000000000000 l df *ABS* 0000000000000000 foo.c
0000000000000000 g F .text 0000000000000013 .hidden foo

关于linux - 找出函数符号在目标文件 (.o) 中的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864445/

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