Ubuntu 14.10では、llvm-symbolizer
プログラムは/usr/bin/llvm-symbolizer-3.5
としてインストールされます。通常、アドレスサニタイザーはPATH
でllvm-symbolizer
という名前のバイナリを見つけたいと考えています。ただし、回避策として、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_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
を設定してASANインストルメント済みプログラムを実行すると、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で義務付けられたバージョンタグが最後に付いているだけです。
Ubuntuはバージョン装飾のないllvm-symbolizer
バイナリを出荷していないため、PATH
を調整してもここでは役に立たないことに注意してください。
UbuntuのLLVMのパッケージ化では、装飾されていないllvm-symbolizer
バイナリをパス/usr/lib/llvm-3.x/bin
から取得できるため、PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]
がそのトリックを実行します。この変更はcompiler_rtのリグレッションだと私はまだ思っています。
以下
Sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer
llvm-symbolizer-4.0
でも機能します
(@Eradenコメントからコピー)