Я пытаюсь использовать оптимизацию времени привязки с флагом -flto
GCC (6.1.1).Использование оптимизации времени соединения GCC со статическими связанными библиотеками
Хотя он отлично работает с моим кодом, он не связан со статической связанной библиотекой, которую я также создаю и свяжу с моим проектом (это Engine, а библиотека glsl-optimizer, только для справки).
Вот результат:
...
/usr/bin/ranlib: ir_expression_flattening.cpp.o: plugin needed to handle lto object
/usr/bin/ranlib: opt_function_inlining.cpp.o: plugin needed to handle lto object
/usr/bin/ranlib: opt_copy_propagation_elements.cpp.o: plugin needed to handle lto object
...
И после этого, конечно же, я получаю несколько «неопределенные ссылки» к некоторым функциям.
Я провел некоторое исследование и выяснил, что это может быть из-за ar
, и я должен попытаться использовать gcc-ar
, но я не уверен, как это сделать.
Кроме того, я использую CMake, который не поддерживает lto (кроме компилятора Intel на некоторых платформах, поэтому я читаю ...). Несмотря на это, я пробовал использовать:
set_property(TARGET glsl_optimizer PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
Какой из них не работает.
Кроме того, я пробовал флаг GCC -fuse-linker-plugin
, который не работал.
Я думаю, мне придется вручную вручную использовать старый способ, используя gcc-ar
, или, может быть, есть какой-то другой метод?
ли вы пытаетесь заменить '' ar' с GCC-ar' в 'кэшированной переменной CMAKE_AR' в' CMakeCache.txt' или через GUI CMake (в по дополнительным опциям)? Эта функция 'INTERPROCEDURAL_OPTIMIZATION' не работает для GCC - это [открытая проблема] (https://gitlab.kitware.com/cmake/cmake/issues/15939) на странице GitLab на CMake. – Florian
@Florian: Я просто попробовал, и только настройка 'CMAKE_AR' не решает проблему. Вам также нужны 'CMAKE_CXX_ARCHIVE_CREATE' и' CMAKE_CXX_ARCHIVE_FINISH' (см. Ответ @Mike Kinghan) – CpCd0y