Работает ли LTO при компиляции с GCC, но при соединении с LLVM LLD? - PullRequest
2 голосов
/ 24 сентября 2019

Я недавно обнаружил компоновщик LLVM, lld, который хвалили за очень быстрое связывание.Действительно, я проверил это, и результаты были потрясающими, время соединения в моем случае резко сократилось по сравнению с gold.

Однако, когда я говорю об оптимизации времени соединения, мои знания ограничены.Насколько я понял, читая материал в Интернете, в объектных файлах создается некоторый дополнительный код, представляющий некоторые внутренние структуры компилятора, который затем используется на этапе компоновки.Таким образом, меня беспокоит, влияет ли это сочетание компилятора и компоновщика на оптимизацию времени соединения (и ее преимущества).Буду признателен за некоторые пояснения по этому вопросу!

Я использовал gcc версию 9.2.0 и lld версию 10.0.0.

Команда, которую я использовал для создания объектных файлов:

/opt/gcc/9.2.0/bin/c++ -fPIE -flto -ffat-lto-objects -fuse-linker-plugin -m64 -O3 -g -DNDEBUG -o my_object.cpp.o -c my_source_file.cpp

Для связи:

#-fuse-ld=gold
/opt/gcc/9.2.0/bin/c++ -fPIE -flto -ffat-lto-objects -fuse-linker-plugin -m64 -pie -fuse-ld=gold -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -static-libstdc++ -static-libgcc -Wl,--threads -Wl,--thread-count,1
#-fuse-ld=lld
/opt/gcc/9.2.0/bin/c++ -fPIE -flto -ffat-lto-objects -fuse-linker-plugin -m64 -pie -fuse-ld=lld -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -static-libstdc++ -static-libgcc -Wl,--threads -Wl,
...