Невозможно включить LTO при связывании с pcre - PullRequest
0 голосов
/ 09 февраля 2019

Я участвую в одном проекте с открытым исходным кодом под названием AMX Mod X. В нем используется действительно простая, специально разработанная система сборки (называемая AMBuild).Проект построен с использованием Clang в Linux.

Я попытался включить LTO для него, просто передав аргументы времени компиляции и времени компоновки.

В качестве аргументов времени компоновки я добавил

-O2 -flto=thin -fuse-ld=lld -Wl,-z,notext

И в качестве аргументов во время компиляции.

-O2 -flto=thin -fPIC

Я выбрал эту конфигурацию после тщательного поиска в Google.Кажется, я очень близок к достижению полного LTO.Не удается собрать только один модуль, он связывается с pcre.

Сгенерированная (системой сборки) команда связывания выглядит следующим образом.

clang-4.0 _public_sdk_amxxmodule.o module.o CRegEx.o utils.o -m32 -O2 -flto=thin -fuse-ld=lld -Wl,-z,notext -ldl -lm -lgcc_eh ../../../support/versionlib/version/libversion.a /home/travis/build/alliedmodders/amxmodx/modules/regex/lib_linux/libpcre.a -shared -o regex_amxx_i386.so

И ошибок связывания много, но они очень похожи,Это одна из них.

/usr/lib/llvm-4.0/bin/ld.lld: error: pcre_compile.c:(function add_to_class): can't create dynamic relocation R_386_32 against symbol '_pcre_ucd_stage1' defined in /home/travis/build/alliedmodders/amxmodx/modules/regex/lib_linux/libpcre.a(libpcre_la-pcre_ucd.o)

Я прочитал , что LLD и bfd имеют разные значения по умолчанию и -Wl,-z,notext должны работать, но это не имело никакого эффекта.

libpcre.a - это просто двоичный файл в комплекте с репозиторием.AMBuild не создает pcre из источников.Это мой PR , вы можете найти там неудачную сборку travis и более внимательно читать логи.Не бойтесь настраиваемой системы сборки, все выполненные команды выводятся на терминал в максимально подробной форме.Это не должно быть проблемой.

Как включить LTO при связывании с pcre?Меня не волнуют другие компиляторы (gcc, icc и т. Д.) Или другие операционные системы.

UPD : LTO означает L чернила T время O оптимизация

...