Заставить lld связать перемещаемые объекты, которые используют отладочную информацию в разных версиях DWARF - PullRequest
0 голосов
/ 30 октября 2019

Существует проект с предварительно созданными зависимостями (набор статических библиотек), все эти библиотеки имеют разделы отладочной информации, сгенерированные в формате набора инструментов по умолчанию - DWARF-4. Я пытаюсь скомпилировать мои исходники с помощью -gdwarf-5, но компоновщик не может связать окончательный загружаемый двоичный файл:

  ld.lld: error: linking module flags 'Dwarf Version': IDs have conflicting values ('i32 4' from foo/bar/baz.cc with 'i32 5' from ld-temp.o)

Есть ли способ убедить компоновщик продолжить работу, даже если разные TU используют разные версии DWARF? После некоторого поиска в Google я нашел этот билет https://reviews.llvm.org/D52952,, где та же самая проблема была объявлена ​​как предупреждение, что заставляет меня думать, что могут быть некоторые шансы ее подавить.

PS Все вышеизложенное касается LLVMнабор инструментов из Android NDK r20 (претендует на LLVM 8), компоновщик lld.

PSS У меня нет шансов перекомпилировать зависимости, поэтому я ищу способ разрешить разные версии DWARF в окончательном бинарном файле.

1 Ответ

0 голосов
/ 31 октября 2019

NDK по умолчанию передает -Wl,--fatal-warnings компоновщику, потому что наиболее распространенный тип предупреждения компоновщика - что-то не определено, что означает, что ваше приложение не работает. За прошедшие годы к компоновщикам было добавлено больше предупреждений, и некоторые (и я полагаю, что это именно тот случай) довольно безобидны.

К сожалению, насколько я знаю, нет способа контролировать фатальные предупреждения нана основе предупреждений, как вы можете с -Werror=warning-name с компилятором. Если у вас все в порядке с отключением всех предупреждений о фатальном компоновщике, вы можете отключить эту функцию с помощью -Wl,--no-fatal-warnings (добавьте ее в свои флаги ldflags). Если вы используете ndk-build, вы можете сделать это для каждого модуля с помощью LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true.

...