Требования к использованию flto

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

gcc -flto one.c two.c

1 ответов


согласно https://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements,

несмотря на "ссылка время" имя, LTO не необходимо использовать любые специальные функции компоновщика. Основным необходимым механизмом является обнаружение разделов GIMPLE внутри объектных файлов. В настоящее время это реализовано в collect2. Поэтому LTO будет работать на любом компоновщике, уже поддерживаемом GCC.

кроме того, документация GCC на -fuse-linker-plugin говорит:

эта опция включена по умолчанию, когда поддержка LTO в GCC включена, и GCC был настроен для использования с плагинами поддержки компоновщика (GNU ld 2.21 или новее или gold).

так что вам не нужно gold вообще, даже если вы хотите использовать специальную функцию "плагин компоновщика", чтобы забрать информацию оптимизации из объектных файлов в архивах библиотеки.


есть использование примеры в -flto документация. Либо

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