Почему внутренние связанные имена появляются в таблице символов моего объектного файла?
Вопрос не важен. Мне просто любопытно.
Вот пример кода:
namespace {
static int foo() {return 10;}
}
static int bar() {return 20;}
Используя GNU readelf -s foobar.o | c++filt -t
, можно найти эти две записи в таблице символов объектного файла:
Value Size Type Bind Vis Ndx Name
00000000 11 FUNC LOCAL DEFAULT 1 (anonymous namespace)::foo()
0000000b 11 FUNC LOCAL DEFAULT 1 bar()
Компилятору не было предложено выдавать символы отладки.
Я случайно заметил, что если я изменю static
на static inline
, символы исчезнут.
Для справки см. Также этот ответ, , который отвечает на другой вопрос, объясняя, как читать вывод readelf
. Мой вопрос, однако, касается не инструмента Readelf как такового, а скорее того, почему компилятор экспортирует символы не из других файлов, насколько мне известно.