Что такое 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).