Ответ довольно прост (в моем случае):
Я использую CMake для сборки своего проекта, и он вставляет флаг -rdynamic
!
Насколько мне известно, сочетание параметров -rdynamic
и --gc-sections
нигде не упоминается в документации GCC. Должно быть следующее предупреждение:
-rdynamic
делает --gc-sections
бесполезные биты. на все символы ссылаются неявно.
См. Также: Что именно `-rdynamic` делает и когда именно это нужно?
Конечно, это влияет только на пользователей CMake ... (не зная):
CMP0065
Не добавляйте флаги для экспорта символов из исполняемых файлов без
: prop_tgt: ENABLE_EXPORTS
целевое свойство.
CMake 3.3 и ниже, по историческим причинам, всегда связанные исполняемые файлы
на некоторых платформах с флагами типа -rdynamic
для экспорта символов из
исполняемые файлы для использования любыми плагинами, которые они могут загрузить через dlopen
.
CMake 3.4 и выше предпочитают делать это только для исполняемых файлов, которые
явно помечены с помощью свойства: prop_tgt: ENABLE_EXPORTS
target.
Поведение OLD
этой политики - всегда использовать дополнительные
флаги ссылки при связывании исполняемых файлов независимо от значения
: prop_tgt: ENABLE_EXPORTS
целевое свойство.
Поведение NEW
этой политики заключается в использовании только дополнительной ссылки
флаги при связывании исполняемых файлов, если: prop_tgt: ENABLE_EXPORTS
Свойство target установлено в True
.
Эта политика была введена в CMake версии 3.4. В отличие от большинства
политики, версия CMake | выпуск | не предупреждает по умолчанию, когда это
политика не установлена и просто использует СТАРОЕ поведение. Смотрите документацию
переменная: *: 1044 * переменная для управления предупреждением.
Чтобы избавиться от большинства ненужных -rdynamic
CMakeLists.txt, просто добавьте cmake_policy(SET CMP0065 NEW)