записи symtab в .o файле формата elf - PullRequest
0 голосов
/ 05 ноября 2011

я учусь связывать ..
я написал следующий код в c и сделал .o, используя gcc

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 по:
gcc begin.c -o begin.o

теперь, когда я проверял symtab с помощью readelf, записи z не было ... почему?
также как gcc разрешает два 'y'?
и в разделе .data как различаются два символа 'x'?

1 Ответ

0 голосов
/ 05 ноября 2011

Я не эксперт, но могу рисковать парой догадок:

  1. Поскольку вы только объявляете z, но никогда не используете его, в этом нет необходимости.чтобы сохранить ссылку на него.

  2. Попробуйте добавить -Wall, который скажет вам (по крайней мере), что y объявлен, но не используется.Первый y на самом деле является просто объявлением, которое вы можете повторять бесконечно, если вы не объявляете конфликтующий тип.

  3. В моей компиляции они заканчиваются именованием x.1281 и x.1287, так что я думаю, что это что-то вроде искажения имени, которое происходит с C ++.1281 и 1287, я думаю, являются смещениями некоторой релевантности, хотя я не вижу ничего очевидного.

...