Я недавно обнаружил компоновщик 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,