Что такое GCC lto wrapper?

Я использую buildroot для подготовки изображений для встроенной системы. Я хочу экспортировать внутренний кросс-компилятор buildroots, чтобы другие могли использовать ту же версию после проверки команды GCC version:arm-linux-gcc -vЯ вижу, настроен COLLECT_LTO_WRAPPER в статическое местоположение на моем HDD

 COLLECT_LTO_WRAPPER=/home/user/arm/buildroot/output/host/usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.7.1/lto-wrapper

это не будет правильно в другой системе.

я смог найти только то, что LTO означает оптимизацию времени ссылки. Не могли бы вы объяснить, для чего используется обертка lto и когда это необходимо?

1 ответов


при компиляции исполняемого файла gcc оптимизирует и объединит одинаковые константы только для текущего файла. Обычно он не может анализировать всю программу, так как .o файл связаны с ld.

это цель оптимизация Межпроцедурное: скомпилируйте весь исполняемый файл, как если бы он был одним исходным файлом, что позволяет сделать код более статичным.

в этом есть проблема, LD не может действительно распознать экспортированный ГИМПЛС.
Для этого LD использует плагин lto (liblto_plugin.Итак.0.0.0) какой вызов сделать илиlto-wrapper непосредственно, которые вызывают lto1, где каждый lto1 lauch отвечает за создание "раздела" (см. параметр-flto-partition и параметр lto-partitions в документации gcc).