elf格式的.o文件中的symtab条目

时间:2011-11-05 04:32:30

标签: gcc symbols elf object-files

我正在学习链接..
我在c中编写了以下代码,并使用gcc

制作了.o
int f()
{
static int x=0;
return x;
}

extern int z;

int g()
{
static int x=10;
return x;
}

static int y;
static int y=9;

int main()
{
return 0;
}

然后我把它变成了.o by:
    gcc begin.c -o begin.o

现在当我使用readelf检查symtab时,没有z的记录....为什么?
gcc如何允许两个'y'? 在.data部分中,两个'x'是如何区分的?

1 个答案:

答案 0 :(得分:0)

我是一名非专家,但我可能会冒一些猜测:

  1. 由于您只声明z但从未实际使用过,因此无需维护对它的引用。

  2. 尝试添加-Wall,它会告诉您(至少)y已声明但未使用。第一个y实际上只是一个声明,只要您不声明冲突类型,就可以无限期重复。<​​/ p>

  3. 在我的编译中,它们最终被命名为x.1281x.1287,所以我猜它类似于C ++中发生的名称错误。 1281和1287我猜是有些相关的偏移,虽然我看不到任何明显的东西。