LINUX.ORG.RU
Ответ на: комментарий от Zmacs

ты не понял вопроса. статик это в сырцах. В скомпиленой либе статика нету. меня интересует именно скомпиленная либа.

anonymous
()

Сорри, не очень понятен вопрос. Можно в терминах С (и опций компилятора, если нужно) - что такое "символ локальный для всей либы" и чем он отличается от "локальный для одного из сырцов" (если это не статик)?

svu ★★★★★
()

ну, у нас статик есть, если я вопрос правильно понял:

$ cat test.c                                                                                              
static int
static_function(void)
{
  return 0;
}

int
global_function(void)
{
  return 0;
}
$ make
cc -O2 -pipe -g   -c test.c -o test.o
building standard test library
ranlib libtest.a
$ nm libtest.a                                                                                            

test.o:
00000008 T global_function
00000000 t static_function
00000000 F test.c
$ man -c nm |grep lower                                                                                   
     If the symbol is local (non-external), the type letter is in lower case.
$ uname                                                                                                
OpenBSD
$

beastie ★★★★★
()
Ответ на: комментарий от beastie

Если честно я под либой имел ввиду so.

а локальный и статический символы намного разные вещи. Статичные символы только в пределах сырца в то время как локальные могут быть видны между сырцами в пределах либы.

вот я и думаю откудова линкер знает когда распостранять область видимости на всю либу а когда только на сырец. Ибо вывод nm одинаковый для обеих случаев.

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

если в вашей терминологии "символ локальный для одного сырца" - это статический символ, а "локальный символ для всей либы" - глобальный символ, то я не пойму как nm может показать одинаковый результат. У одного из файлов в symbol table будет установлен флаг STB_LOCAL, а у другого STB_GLOBAL, благодаря этому линкер их и различит. А для nm это значит разница в регистре буковки (как показал birdie).

Chumka ★★★
()
Ответ на: комментарий от cvv

я так и понял. так вот повторюсь, что nm не может показывать данные символы одинаковыми, разница будет в регистре

Chumka ★★★
()
Ответ на: комментарий от Chumka

:-)

Эт ты сишные сырцы с шаренным обьектником некорректно соспоставляеш.

в либе все немного сложней чем в сырцах

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

я вообще-то ничего не сопоставлял, я на исходный вопрос ответил. Если б Вы пример привели где у Вас nm одинаковые результаты показывал, разговор был бы предметным :)

Chumka ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.