Почему ASAN_SYMBOLIZER_PATH больше не работает с версиями, украшенными двоичными файлами
В Ubuntu 14.10 программа llvm-symbolizer
установлена как /usr/bin/llvm-symbolizer-3.5
. Как правило, адрес дезинфицирующего средства хочет найти двоичный файл с именем llvm-symbolizer
в PATH
. Однако в качестве обходного пути можно было явно установить ASAN_SYMBOLIZER_PATH
. Таким образом, установка ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5
в среде позволяла программной программе для дезинфицирующего средства печати печатать символизированные ошибки.
В Ubuntu 16.04 программа llvm-symbolizer
снова устанавливается с суффиксом версии, теперь как /usr/bin/llvm-symbolizer-3.8
. Однако настройка ASAN_SYMBOLIZER_PATH
больше не работает. Запуск инструментальной программы ASAN с ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
, установленным в среде, создает следующую ошибку, когда ASAN обнаруживает ошибку:
==18718==ERROR: External symbolizer path is set to '/usr/bin/llvm-symbolizer-3.8' which isn't a known symbolizer. Please set the path to the llvm-symbolizer binary or other known tool.
Кто-нибудь знает, почему это поведение изменилось или как восстановить старое поведение? Это кажется необоснованно ограничительным. Программа-символизатор, на которую я указал ASAN, определенно является известным символизатором, в конце концов он имеет в конце тег версии Ubuntu.
Обратите внимание, что настройка PATH
здесь не помогает, так как Ubuntu не отправляет двоичный файл llvm-symbolizer
, который поставляется без украшения версии.
Ответы
Ответ 1
Оказывается, что на Ubuntu-упаковке LLVM можно получить двоякий код без llvm-symbolizer
с пути /usr/lib/llvm-3.x/bin
, поэтому PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]
делает трюк. Я все же думаю, что это изменение является регрессией в compiler_rt.
Ответ 2
sudo ln -s/usr/bin/llvm-symbolizer-3.8/usr/bin/llvm-symbolizer
Также работает для llvm-symbolizer-4.0
(скопировано из комментария @Eraden)