2015-07-28 7 views
5

Если я хочу скомпилировать свой проект с -flto, достаточно ли построить gcc с --enable-gold или мне также нужно построить золото и заменить ld на него? И нужны ли мне какие-либо другие флаги? Т.е. я делаю этоТребования к использованию flto

gcc -flto one.c two.c 

ответ

7

Согласно 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, оптимизация и целевые параметры, передаваемые в командной строке ссылки игнорируется.

+1

Я использую ld 2.24, и в нем говорится, что '-plugin' является непризнанным вариантом. Кроме того, используя последний пример, если я оставил '-flto' на последнем этапе, md5sum результирующего исполняемого файла будет таким же, как с' -flto'. –

+0

Откуда вы получаете '-plugin'? – melpomene

+0

@chewsocks Какая версия gcc вы используете? – melpomene

Смежные вопросы