В вашем вопросе не хватает нескольких деталей, но я попробую ...
GCC обычно удаляет функции в очень немногих случаях:
- Если они объявлены статическими
- В некоторых случаях (например, при использовании -fno-Implement-inlines), если они объявлены как inline
- Любые другие, которые я пропустил
Я предлагаю использовать «nm», чтобы увидеть, какие символы на самом деле экспортируются в результирующие файлы .o, чтобы убедиться, что это действительно проблема, а затем посмотреть на любые случайные «статические» ключевые слова. Не обязательно в этом порядке ...
EDIT:
Кстати, с опциями -Wall или -Wunused-function GCC предупредит о неиспользуемых функциях, которые затем станут основными целями для удаления при оптимизации. Не упустите
предупреждение: ‘xxx’ определено, но не используется
в журналах компиляции.