Согласно https://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements,
Несмотря на «время ссылка» имя, LTO не нужно использовать какие-либо специальные функции компоновщика. Необходимым основным механизмом является обнаружение разделов GIMPLE внутри объектных файлов. Это в настоящее время реализовано в collect2
. Поэтому LTO будет работать на любом компоновщике, уже поддерживаемом GCC.
Кроме того, GCC documentation для -fuse-linker-plugin
говорит:
Эта опция включена по умолчанию, когда поддержка LTO в GCC включен и GCC был настроен для использования с компоновщика поддержкой плагинов (GNU Л.Д. 2,21 или более новых или золото).
Так что вам не нужно gold
вообще, даже если вы хотите использовать специальный «компоновщик плагин», чтобы собрать информацию об оптимизации из объектных файлов в библиотеках архивов.
В примере представлены примеры использования в -flto
documentation. Либо
gcc -o myprog -flto -O2 foo.c bar.c
или
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o
будет работать.
По GCC 4.9, вам не нужно даже -flto
для связи:
Единственная важная вещь, чтобы иметь в виду, что для того, чтобы связь времени оптимизации необходимо использовать драйвер GCC для выполнения ссылки. Затем GCC автоматически выполняет оптимизацию времени соединения, если какой-либо из задействованных объектов был скомпилирован с помощью -flto
.
И, как GCC 5:
В отличие от более ранних версий GCC, оптимизация и целевые параметры, передаваемые в командной строке ссылки игнорируется.
Я использую ld 2.24, и в нем говорится, что '-plugin' является непризнанным вариантом. Кроме того, используя последний пример, если я оставил '-flto' на последнем этапе, md5sum результирующего исполняемого файла будет таким же, как с' -flto'. –
Откуда вы получаете '-plugin'? – melpomene
@chewsocks Какая версия gcc вы используете? – melpomene