В течение последних нескольких лет GCC допускал дублирование определений типов, если они совместимы друг с другом. Проблема, с которой я столкнулся, связана с расширениями отладки DWARF: кажется, что GCC (v4.8) помечает повторяющиеся определения типов как неиспользуемые и не включает их в DWARF.
Пример:
typedef struct yyx yyx_handle;
typedef struct yyx yyx_handle;
yyx_handle *get_yyx(void *p)
{ return (yyx_handle *)p; }
Полученные результаты:
$ gcc -o f1.o -c f1.c -g
$ readelf --debug-dump f1.o | grep yyx_handle | wc -l
0
Если я добавлю -fno-eliminate-unused-debug-types
, typedef будет включен, но тогда также появятся все мои неиспользуемые типы, что увеличит размер объектного файла.
Очевидное решение — удалить повторяющееся определение, но это не всегда практично. Любые другие предложения?
typedef
d имена были другими?yyx_handle
здесь точно не используется? - person tofro   schedule 28.03.2016yyx_handle
используется в примере. Если я удалю одно вхождение typedef, тогда все будет хорошо. - person Freezer   schedule 29.03.2016